HDU 1251 统计难题(字典树模板题)

Posted 谦谦君子,陌上其华

tags:

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

http://acm.hdu.edu.cn/showproblem.php?pid=1251

题意:
给出一些单词,然后有多次询问,每次输出以该单词为前缀的单词的数量。

 

思路:

字典树入门题。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 const int maxn = 1000005;
 6 
 7 int num = 0;
 8 
 9 struct Trie
10 {
11     int son[26];
12     int cnt;  //前缀数量
13     int ends; //单词数量,在本题中其实并没有用到
14 }t[maxn];
15 
16 void init(int x)
17 {
18     t[x].ends = 0;
19     t[x].cnt = 0;
20     memset(t[x].son,0,sizeof(t[x].son));
21 }
22 
23 void insert(char* s)
24 {
25     int u = 0, n = strlen(s);
26     for(int i=0;i<n;i++)
27     {
28         int c = s[i]-a;
29         if(!t[u].son[c])
30         {
31             num++;
32             init(num);
33             t[u].son[c] = num;
34         }
35         u = t[u].son[c];
36         t[u].cnt++;
37     }
38     t[u].ends++;
39 }
40 
41 int query(char* s)
42 {
43     int u = 0, n = strlen(s);
44     for(int i=0;i<n;i++)
45     {
46         int c = s[i]-a;
47         if(t[u].son[c] == 0)  return 0;
48         u = t[u].son[c];
49     }
50     return t[u].cnt;
51 }
52 
53 char s[15];
54 
55 int main()
56 {
57     while(gets(s) && strcmp(s,"")!=0)  insert(s);
58     while(scanf("%s",s)!=EOF)  printf("%d\n",query(s));
59     return 0;
60 }

 

以上是关于HDU 1251 统计难题(字典树模板题)的主要内容,如果未能解决你的问题,请参考以下文章

统计难题HDU - 1251map打表或字典树字典树模板

(字典树)HDU - 1251 统计难题

HDU 1251 统计难题

hdu 1251 统计难题(字典树)

hdu 1251 统计难题(字典树)

HDU 1251 统计难题(字典树)