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