Trie树

 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 int trie[300010][30],sum[300010],cnt,n;
 5 char s[1010][25];
 6 void insert(int len,int k){
 7     int x=0;
 8     for (int i=1;i<=len;i++){
 9         if (!trie[x][s[k][i]-'a'])
10             trie[x][s[k][i]-'a']=++cnt;
11         x=trie[x][s[k][i]-'a'];sum[x]++;
12     }
13 }
14 void ask(int len,int k){
15     int x=0;
16     for (int i=1;i<=len;i++){
17         if (sum[x]==1) break;
18         printf("%c",s[k][i]);
19         x=trie[x][s[k][i]-'a'];
20     }
21 }
22 int main(){
23     cnt=n=0;
24     while (scanf("%s",s[++n]+1)!=EOF)
25         insert(strlen(s[n]+1),n);
26     for (int i=1;i<=n;i++){
27         printf("%s ",s[i]+1);
28         ask(strlen(s[i]+1),i);
29         printf("\n");
30     }
31     return 0;
32 }
STD

 

posted on 2016-10-05 17:06  Absolutezero  阅读(110)  评论(0)    收藏  举报