Topic Link:http://hihocoder.com/problemset/problem/1014 , just learn the dictionary tree, as a template.
Recently, there is no good brush, sin sin.
#include <iostream>#include<cstdio>#include<vector>#include<queue>#include<stack>#include<cmath>#include<string>#include<string.h>#include<algorithm>using namespacestd;#defineLL Long LongConst intMAXN =1000000;structTrie {intch[maxn][ -]; intCNT[MAXN]; intsize; Trie () {size=1; memset (ch[0] ,0,sizeof(ch[0])); memset (CNT,0,sizeof(CNT)); } intIndexCharc) {returnC'a'; } voidInsertChar*s,intv) {inti, u; for(i = U =0; S[i]! =' /'; i++) { intc =index (s[i]); if(!Ch[u][c]) {memset (ch[size],0,sizeof(Ch[size])); CH[U][C]= size++; } u=Ch[u][c]; Cnt[u]++;//must be here } } intQueryChar*s) {inti, u; for(i = U =0; S[i]! =' /'; i++) { intc =index (s[i]); if(!ch[u][c])return 0; U=Ch[u][c]; } returnCnt[u]; }} trie;intMain () {intN, M; Chars[ -]; scanf ("%d", &N); while(n--) {scanf ("%s", s); Trie.insert (s),1); } scanf ("%d", &m); while(m--) {scanf ("%s", s); printf ("%d\n", Trie.query (s)); }}
Hihocoder 1014 Trie Tree