输入一个字典,字典格式为“英语à外语”的一一映射关系
然后输入若干个外语单词,输出他们的 英语翻译单词,如果字典中不存在这个单词,则输出“eh”
poj2503题目意思很简单:就像查找一本字典,根据输入的条目和要查询的单词,给出查询结果(每个单词长度不超过10)。这题有很多实现方式,最容易想到的就是map,但这是acm训练且stl里面的map速度不够快,那就要另谋出路。
自己AC通过的 #include<cstdio> #include<cstring> int num; char des[100001][11]; class tirenode{ public: tirenode * next[26]; int id; tirenode() { memset(next,0,sizeof(next)); id=0; } }root; void insert(char ch1[],char ch2[]) { tirenode *p=&root; int i=0; while(ch2[i]) { if(p->next[ch2[i]-‘a‘]==0) { p->next[ch2[i]-‘a‘]=new tirenode; } p=p->next[ch2[i]-‘a‘]; i++; } if(p->id==0)//如果还没存在这个单词 { num++; p->id=num; strcpy(des[num],ch1); } } int find(char ch3[]) { tirenode *p=&root; int i=0; while(ch3[i]) { if(p->next[ch3[i]-‘a‘]==0) { printf("eh\n"); return 1; } p=p->next[ch3[i]-‘a‘]; i++; } if(p->id==0) printf("eh\n"); else printf("%s\n",des[p->id]); return 1; } int main() { char chch[22],ch1[11],ch2[11]; int i,j; num=0; while(gets(chch) && chch[0]) { for(i=0;chch[i]!=‘ ‘;i++) ch1[i]=chch[i]; ch1[i]=0; i++; j=0; for(;chch[i];i++) ch2[j++]=chch[i]; ch2[j]=0; insert(ch1,ch2); // printf("%s\t%s",ch1,ch2); } while(gets(chch)) { find(chch); } return 1; }
时间: 2024-12-16 10:44:09