POJ2001 Shortest Prefixes
筱柒Littleseven
QQ:3534947775
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define MAXN 300001
using namespace std;
int tot=0,cnt=0; char a[10001][31];
struct Trie{ int nex[27];int num;}trie[MAXN];
void insert(char s[])
{
int now=0,len=strlen(s+1);
for(int i=1;i<=len;i++)
{
int ch=s[i]-'a';
if(!trie[now].nex[ch]) trie[now].nex[ch]=++tot;
now=trie[now].nex[ch];
trie[now].num++;
}
}
void find(char s[])
{
int now=0,len=strlen(s+1);
for(int i=1;i<=len;i++)
{
if(trie[now].num==1) break;
int ch=s[i]-'a';
cout<<(char)s[i];
now=trie[now].nex[ch];
}
}
int main()
{
while(gets(a[++cnt]+1)) insert(a[cnt]);
for(int i=1;i<=tot;i++)
{
cout<<a[i]+1<<' '; find(a[i]); cout<<endl;
}
return 0;
}