#include <iostream>
#include <algorithm>
#include <string>
#include <stack>
#include <queue>
using namespace std;
const int N = 1e6 + 10;
int tr[N][27], n, m, k, x, t;
int w[N], tot;
string s;
void ClearFloat()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
}
void insert(string s)
{
k = 0;
for (int i = 0; i < s.size(); i++)
{
int ne = s[i] - 'a';
if (!tr[k][ne])
tr[k][ne] = ++tot;
k = tr[k][ne];
}
w[k]++;
}
int find(string s)
{
k = 0;
int res = 0;
for (int i = 0; i < s.size(); i++)
{
int ne = s[i] - 'a';
if (!tr[k][ne])
tr[k][ne] = ++tot;
k = tr[k][ne];
res += w[k];
}
return res;
}
int main()
{
ClearFloat();
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
cin >> s;
insert(s);
}
for (int i = 1; i <= m; i++)
{
cin >> s;
cout << find(s) << endl;
}
return 0;
}
字典树代码模板
最新推荐文章于 2024-09-26 23:57:09 发布