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 }
浙公网安备 33010602011771号