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;
}

posted @ 2010-08-29 20:47  菜到不得鸟  阅读(167)  评论(0)    收藏  举报