Hdu1075 - What Are You Talking About - 字典树

来源:互联网 发布:大芒果数据库 编辑:程序博客网 时间:2024/06/07 16:49
#include<stdio.h>#include<string.h>struct tree{int count;tree *next[30];char c[20];int mark;tree(){count=0;mark=0;for(int i=0;i<26;i++){next[i]=NULL;}}}*root;void build(char *ch,char *word){tree *item=root;for(int i=0;word[i]!=NULL;i++){int j=word[i]-'a';if(item->next[j]==NULL){item->next[j]=new tree;}item=item->next[j];item->count++;}item->mark=1;strcpy(item->c,ch);}char* find(char *word){tree *item=root;for(int i=0;word[i]!=NULL;i++){int j=word[i]-'a';if(item->next[j]==NULL){return NULL;}item=item->next[j];}if(item->mark==1){return item->c;}else{return NULL;}}int main(){root=new tree;char word[3005];char ch[20];int j,i;scanf("%s",word);while(scanf("%s",word),strcmp(word,"END")){scanf("%s",ch);build(word,ch);}scanf("%s",word);getchar();while(gets(word),strcmp(word,"END")){int l=strlen(word);int k=0;for(i=0;i<l;i++){while(word[i]>='a'&&word[i]<='z'){ch[k++]=word[i];i++;}ch[k]='\0';char* t=find(ch);if(t!=0){printf("%s",t);}else{printf("%s",ch);}printf("%c",word[i]);k=0;}printf("\n");}}

0 0