#include<iostream>
#include<cstdio>
using namespace std;
char a[1001][21];
int tot,size,sz,t[300001][26],s[300001];
void insert(char ch[]){
int k,len=strlen(ch+1),now=0;
for(int p=1;p<=len;p++){
k=ch[p]-'a';
if(!t[now][k])t[now][k]=++sz;
now=t[now][k];
s[now]++;
}
}
void ask(char ch[]){
int k,len=strlen(ch+1),now=0;
for(int p=1;p<=len;p++){
if(s[now]==1)break;
k=ch[p]-'a';
printf("%c",ch[p]);
now=t[now][k];
}
}
int main(){
while(scanf("%s",a[++tot]+1)!=EOF)insert(a[tot]);
for(int i=1;i<=tot;i++){
printf("%s ",a[i]+1);
ask(a[i]);
printf("\n");
}
return 0;
}
【poj2001】Shortest Prefixes
最新推荐文章于 2020-05-23 22:33:04 发布