1123: 统计难题 (字典树)

1123: 统计难题

时间限制: 1 Sec  内存限制: 128 MB

提交: 4  解决: 4

[提交][状态][讨论版]

题目描述

Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).

输入

输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.

注意:本题只有一组测试数据,处理到文件结束.

输出

对于每个提问,给出以该字符串为前缀的单词的数量.

样例输入

banana
band
bee
absolute
acm

ba
b
band
abc

样例输出

2
3
1
0
字典树的基础题,已经做了好几个字典树的题,思路也比较清晰,先建立字典树,然后再统计前面的前缀数目;这个题就是输入的格式要注意一下,其他的都比较简单,属于字典的入门题吧,直接用自己以前的模板;

下面是ac的代码:

#include <cstdio>

#include <cstring>

#include <cstdlib>

typedef struct node //节点的结构体

{

    int count;//计数

    struct node * next[26];

}node;

node * newnode() //创建新节点

{

    node *q;

    q=(node*)malloc(sizeof(node));

    q->count=1;

    for(int i=0;i<26;i++)

        q->next[i]=NULL;

    return q;

}

void build(node *T,char *s) //建立字典树

{

    node *p;

    p=T;

    int len,k;

    len=strlen(s);

    for(int i=0;i<len;i++)

    {

        k=s[i]-‘a‘;

        if(p->next[k]==NULL)

        {

            p->next[k]=newnode();

            p=p->next[k];

        }

        else

        {

            p=p->next[k];

            p->count++;

        }

    }

}

int search(node *T,char *c) //查询字典树

{

    node *q;

    int sum=0,len,k;

    q=T;

    len=strlen(c);

    for(int i=0;i<len;i++)

    {

        k=c[i]-‘a‘;

        if(q->next[k]!=NULL)

          q=q->next[k];

        else

          return sum=0;

    }

    sum=q->count;

    return sum;

}

int main()

{

    char s[12];

    char c[12];

    node *T;

    T=(node *)malloc(sizeof(node));

    T->count=0;

    for(int i=0;i<26;i++)

        T->next[i]=NULL;

    memset(s,0,sizeof(s));

    memset(c,0,sizeof(c));

    while(gets(s))  //控制输入这里要注意

    {

       if(strcmp(s,"")==0)

        break;

       build(T,s);

    }

    while(scanf("%s",c)!=EOF)

    {

        printf("%d\n",search(T,c));

    }

    return 0;

}
时间: 2025-01-08 22:31:21

1123: 统计难题 (字典树)的相关文章

hdu 1251 统计难题 字典树

// hdu 1251 统计难题 字典树 // // 题目大意: // // 有一系列的单词表,以空行结尾,之后会有一些字母串,找出以这些字符串 // 作为前缀的单词的个数 // // // 解题思路: // // 字典树 Trie,在插入字符串的时候每遇到一个节点,该节点的值++.查找的时候 // 字符串时,如果找到了,那么返回当前的val,否则返回0,因为没有以这个字符串 // 为前缀的单词. // // // 感悟: // // 这段时间想学学数据结构,就看了看刘老的大白书,感觉用数组挺巧

hdu_1251统计难题(字典树Trie)

统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submission(s): 31479    Accepted Submission(s): 12087 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的

HDU 1251 统计难题(字典树)

Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀). Input 输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串. 注意:本题只有一组测试数据,处理到文件结束. Output 对于每个提

hdu 1251 统计难题 (字典树入门题)

1 /******************************************************* 2 题目: 统计难题 (hdu 1251) 3 链接: http://acm.hdu.edu.cn/showproblem.php?pid=1251 4 算法: 字典树 5 提示: 这题压要用c++提交,G++会超内存 6 *******************************************************/ 7 #include<cstdio> 8

HDOJ/HDU 1251 统计难题(字典树啥的~Map水过)

Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀). Input 输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串. 注意:本题只有一组测试数据,处理到文件结束. Output 对于每个提

hdoj 1251 统计难题(字典树)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251 思路分析:该问题要求求出以某个字符串为前缀的单词数目,通过使用字典树,在字典树中添加count记录通过该结点的单词数目即可: 查找时找到前缀的最后一个单词的结点的count值即为所求: 代码如下: #include <cstdio> #include <cstring> #include <iostream> using namespace std; const in

hdu 1251 统计难题 字典树水题

统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others) Total Submission(s): 19627    Accepted Submission(s): 8612 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的

HDU-1251统计难题 ,字典树

题意:问许多单词中,前缀是某个字符串的个数有多少个: 思路:  用字典树建立,每个节点带上num,记录每次insert是,经过这个点的次数, 每次询问,找到这个前缀对应的节点的num就ok 这道题,c++过,g++不行 ac代码: #include <iostream> #include <cstring> #include <algorithm> #include <string> #include <cstdio> using namespa

hdu1251统计难题(字典树)

Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀). Input 输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串. 注意:本题只有一组测试数据,处理到文件结束. Output 对于每个提

hdu1251 统计难题 字典树

Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀). Input 输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串. 注意:本题只有一组测试数据,处理到文件结束. Output 对于每个提