hdu1251统计难题(trie)

Posted HWIM

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu1251统计难题(trie)相关的知识,希望对你有一定的参考价值。

统计难题

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)
Total Submission(s): 41046    Accepted Submission(s): 14830


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

 

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

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

 

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

 

Sample Input
banana band bee absolute acm ba b band abc
 

 

Sample Output
2 3 1 0
 

 

Author
Ignatius.L
 

 

 1 #include<cstdio>
 2 #include<cstring>
 3 const int MAXN = 1000100;
 4 
 5 struct Trie
 6 {
 7     int ch[MAXN][26];
 8     int val[MAXN];
 9     int size;//节点总数
10     void Clear()
11     {
12         size = 1;
13         memset(ch[0],0,sizeof(ch[0]));
14         memset(val,0,sizeof(val));
15     }
16     int idx(char c)
17     {
18         return c - a;   //字符c的编号
19     }
20     void Insert(const char*s)
21     {
22         int u = 0, len = strlen(s);
23         for (int i=0; i<len; ++i)
24         {
25             int c = idx(s[i]);
26             if (!ch[u][c])
27             {
28                 memset(ch[size],0,sizeof(ch[size]));
29                 ch[u][c] = size++;
30             }
31             u = ch[u][c];
32             val[u]++;
33         }
34     }
35     int Find(const char* s)
36     {
37         int u = 0 , len = strlen(s);
38         for (int i=0; i<len-1; ++i)
39         {
40             int c = idx(s[i]);
41             if (!ch[u][c]) return 0 ;
42             u = ch[u][c];
43         }
44         int c = idx(s[len-1]);
45         return val[ch[u][c]] ;
46     }
47 }t;
48 
49 int main()
50 {    
51     char word[15];
52     t.Clear();
53     while (gets(word)&&strcmp(word,""))
54     {
55         t.Insert(word);
56     }
57     while (scanf("%s",word)!=EOF)
58         printf("%d\n",t.Find(word));
59     return 0;
60 }

 

以上是关于hdu1251统计难题(trie)的主要内容,如果未能解决你的问题,请参考以下文章

hdu1251统计难题(trie)

HDU1251 统计难题 trie树

HDU 1251 统计难题(Trie模版题)

HDU 1251 统计难题 (字符串-Trie树)

hdu 1251 统计难题(字典树)

(trie)HDU1251 统计难题