hdu 2147 Hat’s Words
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
char in[50005][100];
char *ans[50005];
struct TNode
{
TNode()
{
end=0;
memset(next,0,sizeof(next));
}
bool end;
TNode *next[26];
};
typedef TNode *Trie;
void insert(Trie p,char *str)
{
while(*str)
{
int t=*str-'a';
if(!p->next[t]) p->next[t]=new TNode;
p=p->next[t];
++str;
}
p->end=true;
}
bool search(Trie t,char *str,int times)
{
Trie p=t;
while(*str)
{
int i=*str-'a';
if(!p->next[i]) return false;
p=p->next[i];
if(p->end)
{
if(times==1)
{
if(search(t,str+1,2))
{
return true;
}
}
}
str++;
}
if(p && p->end && times==2) return true;
return false;
}
int main()
{
Trie p=new TNode;
int i=0;
while(scanf("%s",in[i])!=EOF)
{
insert(p,in[i]);
i++;
}
int j,k=0;
for(j=0; j<i; j++)
{
if(search(p,in[j],1))
{
ans[k++]=in[j];
}
}
sort(ans,ans+k);
for(j=0; j<k; j++)
printf("%s\n",ans[j]);
return 0;
}
浙公网安备 33010602011771号