题目:https://hihocoder.com/problemset/problem/1014
字典树:统计字典中前缀为str的所有字符串的总数。
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 400000 + 7;
int ch[MAXN][26];
int val[MAXN];
int sz = 1;
void insert_str(string str) {
int u = 0, c;
for(int i = 0; str[i]; ++i) {
c = str[i] - 'a';
if(!ch[u][c]) {
ch[u][c] = sz++;
}
u = ch[u][c];
val[u]++;
}
}
int query_str(string str) {
int u = 0, c;
for(int i = 0; str[i]; ++i) {
c = str[i] - 'a';
if(!ch[u][c]) {
return 0;
}
u = ch[u][c];
}
return val[u];
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
fill((int *)ch, (int *)ch + MAXN * 26, 0);
fill(val, val + MAXN, 0);
sz = 1;
int n, m;
string str;
cin >> n;
while(n--) {
cin >> str;
insert_str(str);
}
cin >> m;
while(m--) {
cin >> str;
cout << query_str(str) << endl;
}
return 0;
}