码迷,mamicode.com
首页 > 其他好文 > 详细

HDU1247(经典字典树)

时间:2016-01-11 00:02:39      阅读:430      评论:0      收藏:0      [点我收藏+]

标签:

#include"cstdio"
#include"cstring"
using namespace std;
const int MAXN=50005;
const int N=26;
struct node{
    bool val;
    node* next[N];
};
node* root;
node memory[MAXN];
int ant;

node* create()
{
    node* p=&memory[ant++];
    for(int i=0;i<N;i++)
    {
        p->next[i]=NULL;
        p->val=false;
    }
    return p;
}

void insert(char *s)
{
    node* p=root;
    for(int i=0;s[i];i++)
    {
        int k=s[i]-a;
        if(p->next[k]==NULL) p->next[k]=create();
        p=p->next[k];
    }
    p->val=true;//若能走到最末端,则返回true; 
}

bool search(char *s)
{
    node* p=root;
    for(int i=0;s[i];i++)
    {
        int k=s[i]-a;
        if(p->next[k]==NULL)    return false;
        p=p->next[k];
    }
    return p->val;//若只是某个已插入单词的前缀,则返回false; 
}

int main()
{
    int cnt=0;
    root=create();
    char word[MAXN][20];
    while(scanf("%s",word[cnt])!=EOF)
    {
        //if(word[cnt][0]==‘0‘)    break;
        insert(word[cnt]);
        cnt++;
    }
    for(int i=0;i<cnt;i++)
    {
        for(int j=1;word[i][j];j++)
        {
            char fr[20]={\0};
            char re[20]={\0};
            strncpy(fr,word[i],j);
            strncpy(re,word[i]+j,strlen(word[i])-j);
            if(search(fr)&&search(re))
            {
                printf("%s\n",word[i]);
                break;
            }
        }
    }
    
    return 0;
}

 

HDU1247(经典字典树)

标签:

原文地址:http://www.cnblogs.com/program-ccc/p/5119726.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!