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

hdu1251 简单字典树

时间:2015-07-30 00:32:25      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

之前去省赛打酱油,遇到一题二进制相关的题目,当时都没做出。后来几个学长找规律打表,然后做;老族长说要用到字典树思想。

也应该学习学习字典树。随手拿水题,看题解,看代码,还是懂了字典树;

内存消耗真的大。。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxn 26//26个字母
 struct trie
{
    trie *next[maxn];//向下26个字母扩展
    int v;//记录个数
};
trie *root;
void init()
{
    root=(trie*)malloc(sizeof(trie));
    for(int i=0;i<maxn;i++)
        root->next[i]=NULL;
    root->v=0;
}
void creattrie(char *str)
{
    trie *p,*q;
    p=root;
    int i,j;
    int len=strlen(str);
    for(i=0;i<len;i++)
    {
        int id=str[i]-‘a‘;
        if(p->next[id]==NULL)
        {
            q = (trie *)malloc(sizeof(trie));
            q->v=0;
            for(j=0;j<maxn;j++)
                q->next[j]=NULL;
            p->next[id]=q;
        }
        p=p->next[id];
        p->v++;//次数增加
    }
}
int query(char *str)
{
    int i,j;
    int len=strlen(str);
    trie *p=root;
    for(i=0;i<len;i++)
    {
        int id=str[i]-‘a‘;
        if(p->next[id]==NULL)
            return 0;
        p=p->next[id];
    }
    return p->v;
}
int main()
{
    char str[15];
    int i,j;
    init();
    while(gets(str))
    {
        if(strcmp(str,"")==0)break;
        creattrie(str);
    }
    while(gets(str))
    {
        if(strcmp(str,"")==0)break;
        printf("%d\n",query(str));
    }
}

 

hdu1251 简单字典树

标签:

原文地址:http://www.cnblogs.com/sweat123/p/4687769.html

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