a ahat hat hatword hziee word
ahat hatword
昨天晚上用STL 1a渺杀 ,今天改用trie树 wa一上午 也是醉了!指针真的好烦人!
STL:
#include<iostream> #include<sstream> #include<algorithm> #include<cstdio> #include<string.h> #include<cctype> #include<string> #include<cmath> #include<vector> #include<stack> #include<queue> #include<map> #include<set> using namespace std; int main() { string str; map<string,int >cnt; set<string>dict; vector<string>buf; while(cin>>str) { cnt[str]=1; buf.push_back(str); } for(int i=0; i<buf.size(); i++) { string str2; for(int j=0; j<buf[i].size()-1; j++) { str2+=buf[i][j]; if(cnt.count(str2)&&cnt.count(buf[i].substr(j+1,buf[i].size()-j-1))) { dict.insert(buf[i]); break; } } } for(set<string>::iterator it=dict.begin(); it!=dict.end(); it++) cout<<*it<<endl; return 0; }
#include<iostream> #include<sstream> #include<algorithm> #include<cstdio> #include<string.h> #include<cctype> #include<string> #include<cmath> #include<vector> #include<stack> #include<queue> #include<map> #include<set> using namespace std; char cnt[50031][153]; struct Node { struct Node *next[26]; bool isword; Node() { memset(next,NULL,sizeof(next)); isword=0; } }*root; void insertWord(Node * node ,char *co) { int id; node = root ; while(*co) { id=*co-'a'; if(node->next[id]==NULL) node->next[id]=new Node; node = node->next[id]; co++; } node->isword=1; } bool searchWord(Node *node ,char *co) { int flag=0; node = root; while(*co) { int id=*co-'a'; if(node->next[id]) { node=node->next[id]; if(node->isword) { flag=1; Node *p=root; char *pt=co; pt++; while(*pt) { int id=*pt-'a'; if(p->next[id]) p=p->next[id]; else { flag=0; break; } pt++; } if(flag) { if(p->isword) return 1; } } } co++; } return 0; } int main() { int t=0; root=new Node; while(~scanf("%s",cnt[t++])) { insertWord(root,cnt[t-1]); } for(int i=0; i<t; i++) { if(searchWord(root,cnt[i])) { printf("%s\n",cnt[i]); } } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
杭电 HDU 1247 ACMHat’s Words(trie树 或着STL)
原文地址:http://blog.csdn.net/lsgqjh/article/details/46966621