1. 程式人生 > >hiho 第2周 Trie樹(字典樹)

hiho 第2周 Trie樹(字典樹)

oid syn one ++ tac col splay str gif

裸字典樹。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\n",Query()); 59 } 60 return 0; 61 }
View Code

hiho 第2周 Trie樹(字典樹)