hiho 第2周 Trie树(字典树)

Posted ehanla

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hiho 第2周 Trie树(字典树)相关的知识,希望对你有一定的参考价值。

裸字典树。AC自动机前缀技能

技术分享图片
 1 #include <set>
 2 #include <map>
 3 #include <queue>
 4 #include <deque>
 5 #include <stack>
 6 #include <cmath>
 7 #include <cstdio>
 8 #include <vector>
 9 #include <string>
10 #include <cstring>
11 #include <fstream>
12 #include <iostream>
13 #include <algorithm>
14 using namespace std;
15 
16 #define eps 1e-8
17 #define PI acos(-1.0)
18 #define INF 0x3f3f3f3f
19 #define FAST_IO ios::sync_with_stdio(false)
20 
21 typedef long long LL;
22 const int N=1000000+10;
23 int trie[N][26],sum[N],tot;
24 char s[20];
25 
26 void Insert(){
27     int root=0;
28     int len=strlen(s);
29     for(int i=0;i<len;i++){
30         int id=s[i]-a;
31         if(!trie[root][id]) trie[root][id]=++tot;
32         sum[trie[root][id]]++;
33         root=trie[root][id];
34     }
35 }
36 
37 int Query(){
38     int root=0;
39     int len=strlen(s);
40     for(int i=0;i<len;i++){
41         int id=s[i]-a;
42         if(!trie[root][id]) return 0;
43         root=trie[root][id];
44     }
45     return sum[root];
46 }
47 
48 int main(){
49     int n,m;
50     scanf("%d",&n);
51     for(int i=1;i<=n;i++){
52         scanf("%s",s);
53         Insert();
54     }
55     scanf("%d",&m);
56     for(int i=1;i<=m;i++){
57         scanf("%s",s);
58         printf("%d
",Query());
59     }
60     return 0;
61 }
View Code

 

以上是关于hiho 第2周 Trie树(字典树)的主要内容,如果未能解决你的问题,请参考以下文章

hiho1014(trie树)

hiho一下 第二周&第四周:从Trie树到Trie图

HiHo1014 : Trie树(Trie树模板题)

01字典树

hdu1705(字典树)

Trie树(字典树)