#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct node
{
node* next[28];
int count;
node():count(0){memset(next,0,sizeof(next));}
};
char ss[50005][30];
node *root=new node;
void Insert(char *str)
{
int i;
node *t=root;
int l=strlen(str);
for(i=0;i<l;i++)
{
if(t->next[str[i]-'a']==0)
{
node *p=new node;
t->next[str[i]-'a']=p;
t=t->next[str[i]-'a'];
}
else
{
t=t->next[str[i]-'a'];
}
}
t->count=1;
}
int Find(char *str)
{
node *t=root;
int i,l=strlen(str);
for(i=0;i<l;i++)
{
t=t->next[str[i]-'a'];
if(!t)
return 0;
}
if(t->count)
return 1;
else
return 0;
}
int main()
{
char str[50];
int k=0;
while(scanf("%s",str)!=EOF)
{
Insert(str);
strcpy(ss[k],str);
k++;
}
int i,j,l;
char str1[50],str2[50];
for(i=0;i<k;i++)
{
l=strlen(ss[i]);
for(j=1;j<l;j++)
{
strncpy(str1,ss[i],j);
str1[j]='\0';
strcpy(str2,ss[i]+j);
if(Find(str1)&&Find(str2))
{
printf("%s\n",ss[i]);
break;
}
}
}
return 0;
}
hdu 1247
最新推荐文章于 2019-03-18 20:48:45 发布