#include <iostream> #include <string.h> #include <stdio.h> using namespace std; //字典树模板题 int Tire[100010][26]; char arr[10001][35]; int v[100010]; int cnt=1; void _insert(char s[]){ int root=0; for(int i=0;s[i];i++){ int next=s[i]-'a'; if(!Tire[root][next]) Tire[root][next]=++cnt; root=Tire[root][next];v[root]++; } } void _find(char bufs[]){ int root=0; int next; for(int i=0;bufs[i];i++){ next=bufs[i]-'a'; printf("%c",bufs[i]); root=Tire[root][next]; if(v[root]==1) break; } } int main() { char str[1005]; int tot=0; while(~scanf("%s",str)) { if(str=="0") break; tot++; strcpy(arr[tot],str); _insert(arr[tot]); } for(int i=1; i<=tot; i++) { printf("%s ",arr[i]); _find(arr[i]); printf("\n"); } return 0; } |
Double click to view unformatted code.