HDU 1247:Hat’s Words(字典树)
来源:互联网 发布:化妆品成分查询软件 编辑:程序博客网 时间:2024/05/01 15:45
Hat’s Words
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2205 Accepted Submission(s): 804
Problem Description
A hat’s word is a word in the dictionary that is the concatenation of exactly two other words in the dictionary.
You are to find all the hat’s words in a dictionary.
You are to find all the hat’s words in a dictionary.
Input
Standard input consists of a number of lowercase words, one per line, in alphabetical order. There will be no more than 50,000 words.
Only one case.
Only one case.
Output
Your output should contain all the hat’s words, one per line, in alphabetical order.
Sample Input
aahathathatwordhzieeword
Sample Output
ahathatword
题意:给一些单词(以字典序输入),找出那些可以分成另外的两个单词的单词,以字典序输出;
源代码:(15MS)
#include<iostream>#include<string.h>using namespace std;const int NODEMAX=26;const int MAX=50005;char word[MAX][16]; //这道题16就足够了struct TrieNode{ bool is; TrieNode *next[NODEMAX]; TrieNode() { is=false; memset(next,0,sizeof(next)); }};void InsertTrie(TrieNode *pRoot,char s[]){ int i; TrieNode *p=pRoot; i=0; while(s[i]) { int k=s[i]-'a'; if(p->next[k]==NULL) p->next[k]=new TrieNode(); i++; p=p->next[k]; } p->is=true; //该结点是单词的尾}bool Search(TrieNode *pRoot,char s[]){int i,top=0,stack[1000];TrieNode *p=pRoot;i=0;while(s[i]){int k=s[i++]-'a';if(p->next[k]==NULL)return 0;p=p->next[k];if(p->is && s[i]) //找到该单词含有子单词的分隔点stack[top++]=i;//入栈}while(top)//从可能的分割点去找{ bool ok=1;i=stack[--top];p=pRoot;while(s[i]){int k=s[i++]-'a';if(p->next[k]==NULL){ok=false;break;}p=p->next[k];}if(ok && p->is)//找到最后,并且是单词的return 1;}return 0;}int main(){ int i=0; TrieNode *pRoot=new TrieNode(); while(gets(word[i])) { InsertTrie(pRoot,word[i]); i++;}for(int j=0;j<i;j++)if(Search(pRoot,word[j]))cout<<word[j]<<endl; return 0;}
- HDU 1247 Hat’s Words(字典树)
- hdu 1247 字典树 Hat’s Words
- HDU 1247 Hat’s Words 字典树
- hdu 1247 Hat’s Words 字典树
- HDU 1247 Hat’s Words(字典树)
- hdu 1247 Hat’s Words(字典树)
- hdu 1247 Hat’s Words字典树
- hdu 1247 Hat’s Words(字典树)
- hdu 1247 Hat’s Words 字典树
- 【字典树】HDU 1247 Hat’s Words
- HDU--1247:Hat’s Words (字典树)
- hdu 1247 Hat’s Words(字典树)
- [字典树] HDU 1247 - Hat’s Words
- hdu 1247 Hat’s Words (字典树)
- HDU 1247 Hat’s Words 字典树
- HDU - 1247 Hat’s Words(字典树)
- hdu 1247 Hat’s Words 字典树
- hdu 1247 Hat’s Words(字典树)
- 输入输出文件
- 第0章 无中生有
- 二叉树及按层遍历的算法实现
- 王爽汇编第十章课程设计精简设计~(整理)
- 顺序查找
- HDU 1247:Hat’s Words(字典树)
- 折半查找
- 用visio画UML图
- HDU3995 最小包围圆变形
- 哈希表查找
- 常用正则表达式
- 冒泡排序
- ubuntu11.0.4下编译Android2.3源码过程
- js传参机制-总结