AcWing 142. 前缀统计
原题链接
简单
作者:
回归线
,
2021-04-14 21:43:08
,
所有人可见
,
阅读 183
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1000010;
char str[N];
int son[N][26], cnt[N], idx;
void insert(char *str) {
int p = 0;
for (int i = 0; str[i]; ++i) {
const int u = str[i] - 'a';
if (!son[p][u]) {
son[p][u] = ++idx;
}
p = son[p][u];
}
++cnt[p];
}
int query(char *str) {
int res = 0;
int p = 0;
for (int i = 0; str[i]; ++i) {
const int u = str[i] - 'a';
if (!son[p][u]) {
return res;
}
p = son[p][u];
res += cnt[p];
}
return res;
}
int main() {
int m, n;
scanf("%d%d", &m, &n);
while (m--) {
scanf("%s", str);
insert(str);
}
while (n --) {
scanf("%s", str);
printf("%d\n", query(str));
}
return 0;
}