HDU 1075 What Are You Talking About
字典树……
#include <cstdio>
#include <cstring>
using namespace std;
struct node{int son[26]; char hash[12];}trie[1000000];
int cnt,n;
char s[100000],s1[12],ans[12];
void insert(char *s,char *s1){
for(int l=strlen(s),x=0,i=0;i<l;i++){
if(!trie[x].son[s[i]-'a'])trie[x].son[s[i]-'a']=++cnt;
x=trie[x].son[s[i]-'a'];
if(i==l-1)strcpy(trie[x].hash,s1);
}
}
int find(char *s){
for(int l=strlen(s),x=0,i=0;i<l;i++){
if(!trie[x].son[s[i]-'a'])return 0;
x=trie[x].son[s[i]-'a'];
if(i==l-1){
strcpy(ans,trie[x].hash);
return strlen(ans)?1:0;
}
}
}
int main(){
while(~scanf("%s",&s)){
if(strcmp(s,"START")==0)continue;
if(strcmp(s,"END")==0)break;
scanf("%s",&s1);
insert(s1,s);
}
gets(s);
while(gets(s)){
if(strcmp(s,"START")==0)continue;
if(strcmp(s,"END")==0)break;
int i=0,j=0,len=strlen(s);
while(i<len){
if(s[i]<'a'||s[i]>'z'){
if(find(s1))printf("%s",ans);
else printf("%s",s1);
printf("%c",s[i++]);
j=0;
memset(s1,0,sizeof s1);
memset(ans,0,sizeof ans);
}else s1[j++]=s[i++];
}
printf("\n");
}
return 0;
}
愿你出走半生,归来仍是少年

浙公网安备 33010602011771号