Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 102400/204800 K (Java/Others)
Total Submission(s): 9040 Accepted Submission(s): 2832
#include<stdio.h> #include<malloc.h> #include<string.h> struct node { char marth[11]; bool has; struct node *next[26]; }; void insert(char *str,char *str1,node *T) { node *p,*q; int len,id,i,j; p=T; len=strlen(str); for(i=0;i<len;++i) { id=str[i]-'a'; if(p->next[id]==NULL) { q=(node*)malloc(sizeof(node)); p->has=false; for(j=0;j<26;++j) q->next[j]=NULL; p->next[id]=q; } p=p->next[id]; } p->has=true; strcpy(p->marth,str1); } void find(char *str,node *T) { int len,i,id,flag; node *p; p=T; len=strlen(str); flag=0; for(i=0;i<len;++i) { id=str[i]-'a'; if(p->next[id]==NULL) { flag=1; break; } else p=p->next[id]; } if(flag||!p->has) printf("%s",str); else printf("%s",p->marth); return; } int main() { char str[1001],str1[1001]; node *T; int i,len,k; T=(node*)malloc(sizeof(node)); for(i=0;i<26;i++) T->next[i]=NULL; scanf("%s",str); while(1) { scanf("%s",str); if(strcmp(str,"END")==0) { break; } scanf("%s",str1); insert(str1,str,T); } getchar();//吸收上面的回车 gets(str); while(1) { gets(str); if(strcmp(str,"END")==0) { break; } len=strlen(str); k=0; // memset(str1,'\0',sizeof(str1)); // strcpy(str1,""); for(i=0;i<len;++i) { if(str[i]>='a'&&str[i]<='z') { str1[k++]=str[i]; } else { str1[k]='\0'; if(k!=0) { find(str1,T); k=0; // strcpy(str1,""); } printf("%c",str[i]); } } printf("\n"); } return 0; }
主要就是取词时注意一些细节