hdu1305 简单字典树

这题我开始想的简单了,WA一次,然后看disscuss里有人说输入时长度从小到大的,然后我信了。然后开始while(1) WA;然后我尝试先放如数组。后来对了;

discuss里面果然不能太相信。

根据出现的次数来判断是否为前缀。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct trie
{
    trie *next[2];
    int sum;
};
trie *root;
void creattrie()
{
    root=(trie*)malloc(sizeof(trie));
    for(int i=0;i<2;i++)
    {
        root->next[i]=NULL;
    }
    root->sum=0;
}
void insert(char *str)
{
    int i,j,cnt=0;
    int len=strlen(str);
    trie *p=root,*q;
    for(i=0;i<len;i++)
    {
        int id=str[i]-‘0‘;
        if(p->next[id]==NULL)
        {
            q=(trie*)malloc(sizeof(trie));
            for(j=0;j<2;j++)
                q->next[j]=NULL;
            q->sum=0;
            p->next[id]=q;
        }
        p=p->next[id];
        p->sum++;
    }
}

int query(char *str)
{
    int i,j;
    int cnt=0;
    int len=strlen(str);
    trie *p=root;
    for(i=0;i<len;i++)
    {
        int id=str[i]-‘0‘;
        p=p->next[id];
    }
    if(p->sum>1)//判断到该字符串结束时,现在的sum是否超过2,如果是,那就代表后面有以这个为前缀的词
        cnt=1;
    if(cnt)
        return 1;
    return 0;
}

int main()
{
    int i,j,flag,ff=0,ret,count;
    char str[100][30];
    while(gets(str[0])!=NULL)
    {
        if(str[0][0]==‘9‘)break;
        count=1;
        creattrie();
        insert(str[0]);
        while(gets(str[count]))
        {
            if(str[count][0]==‘9‘)break;
            insert(str[count]);
            count++;
        }
        flag=0;
        for(i=0;i<count;i++)
        {
            flag=query(str[i]);
            if(flag)break;
        }
        if(flag)printf("Set %d is not immediately decodable\n",++ff);
        else printf("Set %d is immediately decodable\n",++ff);
    }
    return 0;
}
时间: 2024-10-11 22:20:51

hdu1305 简单字典树的相关文章

HDU 1247 简单字典树

Hat’s Words Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7359    Accepted Submission(s): 2661 Problem Description A hat’s word is a word in the dictionary that is the concatenation of exactly

hdu1251 简单字典树

之前去省赛打酱油,遇到一题二进制相关的题目,当时都没做出.后来几个学长找规律打表,然后做:老族长说要用到字典树思想. 也应该学习学习字典树.随手拿水题,看题解,看代码,还是懂了字典树: 内存消耗真的大.. #include<stdio.h> #include<stdlib.h> #include<string.h> #define maxn 26//26个字母 struct trie { trie *next[maxn];//向下26个字母扩展 int v;//记录个数

统计难题(简单字典树)

字典树(讲解+模板) 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高. 字典树跟字典很相似,当我们要查询一个单词是不是在字典中时,我们首先查询单词的第一个字母,之后确定了一个字母后,查找下一个字母,反复这种操作,直到找到单词,但是这种效率很低,在庞大的单词系统面前,则显得心塞了.

HDU4825/5536 [01 字典树/简单字典树更新]

Xor Sum Time Limit: 1000 MS Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeus 发起M次询问,每次询问中包含一个正整数 S ,之后 Zeus 需要在集合当中找出一个正整数 K ,使得 K 与 S 的异或结果最大.Prometheus 为了让 Zeus 看到人类的伟大,随即同意 Zeus 可以向人类求助.你能证明人类的智慧么? Input 输入包含若干组测试数

Phone List(简单的字典树插入操作)

Phone List Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11655    Accepted Submission(s): 3970 Problem Description Given a list of phone numbers, determine if it is consistent in the sense th

字典树简单运用--》去亿万条城市三字码数据中Check是否存在某个城市三字码

前言:不知不觉来C***P半年了,过得也算是不好不坏.遇到过出问题只会推给开发,一直抱怨却提不出方案的业务:也遇到过大V开头(可以问度娘)的水的冒泡的开发. 有两件小事和大家分享一下: 1)我们组的接口调用某个外部接口,有些条件下该外部接口会直接把exception(堆栈信息,代码物理路径也有..)抛给我们,我邮件给相关的测试和开发, 不出意外,没有回复:后来不知道他们搞什么鬼,想让我们把这个exception也Log下来... 2)说起这个大V开头的,也是我们要调用的某个外部接口的开发.简单描

/*字典树*/一些简单题

原理很简单,,,,,肯定能看懂,,,我觉得实现费点劲..... 我的模板: #include <iostream> #include<bits/stdc++.h> using namespace std; #define  MAX  26 typedef struct TrieNode { int nCount;  // 该节点前缀 出现的次数 struct TrieNode *next[MAX]; //该节点的后续节点 } TrieNode; TrieNode Memory[10

LA、Remember the Word (字典树, 简单dp)

传送门 题意: 给你一个初始串 S,strlen(s) <= 3e5  然后给你 n 个单词. n <= 4000,  每个单词的长度不超过 100 : 问你这个初始串,分割成若干个单词的连接的方案:(这些单词必须是给定的n个单词中的任意一个,一个单词可以被使用多次.) 解: 将 n 个单词建个字典树: dp[ i ] 表示,S的 0 ~ i - 1 切割成若干个 单词的方案数: 枚举S, 枚举到 当前位置 i: 然后就在字典树找,以 S 的 i + 1 开始的, 能不能找到一个单词与之匹配:

字典树的简单实现

Trie树,又称为字典树,是一种树形结构,是一种哈希树的变种,是一种用于快速检索的多叉树数据结构. 用于保存大量的字符串.它的优点是:利用字符串的公共前缀来节约存储空间. Trie的核心思想是空间换时间.利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的. 它有3个基本性质: 1.根节点不包含字符,除根节点外每一个节点都只包含一个字符. 2.从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串. 3.每个节点的所有子节点包含的字符都不相同. 搜索字典项目的方法为: (1)