注意strncpy,真是个好主意,在别人博客发现的
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int trie[100099][30];
int is[100099];
char a[50005][20];
int rt,top=1;
int insert(char a[],int rt)
{
for(int i=0; a[i]; i++)
{
int x=a[i]-'a';
if(trie[rt][x]==0)
{
trie[rt][x]=++top;
}
rt=trie[rt][x];
}
is[rt]=1;
}
int find(char a[],int rt)
{
int x;
for(int i=0; a[i]; i++)
{
x=a[i]-'a';
if(trie[rt][x]==0)
return 0;
rt=trie[rt][x];
}
return is[rt];
}
int main()
{
memset(trie,0,sizeof(trie));
memset(is,0,sizeof(is));
int rt=1;
int n=0;
while(~scanf("%s",&a[n]))
{
insert(a[n],rt);
n++;
}
// char test[20];
// while(cin>>test)
// cout<<find(test,1)<<endl;
char test1[20],test2[20];
for(int i=0;i<n;i++){
int len=strlen(a[i]);
for(int j=1;j<len;j++)
{
memset(test1,0,sizeof(test1));
memset(test2,0,sizeof(test2));
strncpy(test1,a[i],j);
strncpy(test2,a[i]+j,len-j);
// cout<<test1<<" "<<test2<<endl;
if(find(test1,1)&&find(test2,1)){
printf("%s\n",a[i]);
break;
}
}
// cout<<i<<endl;
}
}