传送门:HihoCoder 1014
题解
熟练白书的数组模拟Trie树模板
AC code:
#include<iostream>
#include<cstring>
using namespace std;
const int maxn(1e6 + 5);
int cnt[maxn], ch[maxn][26];
int idx(char p){return p - 'a';}
struct Trie{
int sz;
Trie(){
sz = 1;
memset(cnt, 0, sizeof(cnt));
memset(ch, 0, sizeof(ch));
}
void insert_node(char *s){
int u = 0, len = strlen(s);
for(int i = 0; i < len; ++i){
int v = idx(s[i]);
if(!ch[u][v]){
ch[u][v] = sz++;
}
u = ch[u][v];
++cnt[u];
}
}
int query(char *s){
int u = 0, len = strlen(s);
for(int i = 0; i < len; ++i){
int v = idx(s[i]);
if(!ch[u][v]) return 0;
u = ch[u][v];
}
return cnt[u];
}
};
int main(){
int n, m;
char s[15];
while(cin >> n){
Trie root;
for(int i = 0; i < n; ++i) {
cin >> s;
root.insert_node(s);
}
cin >> m;
while(m--){
cin >> s;
cout << root.query(s) << endl;
}
}
return 0;
}