Time Limit: 3000MS | Memory Limit: 65536K | |
Total Submissions: 35828 | Accepted: 15320 |
Description
Input
Output
Sample Input
dog ogday cat atcay pig igpay froot ootfray loops oopslay atcay ittenkay oopslay
Sample Output
cat eh loops
Hint
Source
STL同样秒杀 我就怀疑字典树有个鸡毛用,测试样例太少了吧!
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,string >cnt; while(getline(cin,str)&&str[0]!=0) { int loc=str.find(" "); cnt[str.substr(loc+1,str.size()-loc-1)]=str.substr(0,loc); } while(cin>>str) { if(cnt.count(str)) cout<<cnt[str]<<endl; else cout<<"eh"<<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; typedef struct NodeType { struct NodeType * child[26]; char word [11]; int isWord; NodeType() { memset(child,NULL,sizeof(child)); isWord=0; } } Node; void insertWord(Node *node,char *wo,char *wt) { int id; while(*wt) { id=*wt-'a'; if(node->child[id]==NULL) node->child[id]=new Node(); node=node->child[id]; wt++; } node->isWord=1; strcpy(node->word,wo); } char * searchWord(Node * node,char *wd) { char *noWord="eh"; int id; while(*wd) { id=*wd-'a'; if(node->child[id]==NULL) return noWord; node=node->child[id]; wd++; } if(node->isWord) return node->word; else return noWord; } int main() { char cnt[40],dict[40],buf[40]; Node * node=new Node; while(gets(buf)&&buf[0]!=0) { int i=0; for(; buf[i]!=32; i++) cnt[i]=buf[i]; cnt[i]=0; int j; for(++i,j=0; buf[i]; i++,j++) dict[j]=buf[i]; dict[j]=0; insertWord(node,cnt,dict); } while(scanf("%s",cnt)!=EOF) { char *word = searchWord(node,cnt); printf("%s\n",word); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/lsgqjh/article/details/46966657