首页 > 其他 > 详细

HDU1247(经典字典树)

时间:2016-01-10 23:59:26      阅读:581      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!