AcWing 142. 前缀统计
原题链接
简单
作者:
pdsuacm02
,
2021-05-27 20:17:10
,
所有人可见
,
阅读 250
C++ 代码
#include <iostream>
using namespace std;
const int N = 1000010;
int son[N][26],cnt[N],f[N];
int idx;
void insert(char s[])
{
int p = 0,u;
for(int i = 0;s[i];i++){
u = s[i] - 'a';
if(!son[p][u]) son[p][u] = ++idx;
p = son[p][u];
}
f[p]++;
}
int querry(char s[])
{
int p = 0,cnt = 0;
for(int i = 0;s[i];i++){
int u = s[i] - 'a';
if(!son[p][u]) return cnt;
else{
p = son[p][u];
if(f[p]) cnt += f[p];
}
}
return cnt;
}
int main()
{
int n,m;
cin >> n >> m;
while (n--)
{
char s[N];
cin >> s;
insert(s);
}
while (m--)
{
char s[N];
cin >> s;
cout<<querry(s)<<endl;
}
}