思路:
直接一个trie树
c o d e code code
#include<iostream>
#include<cstdio>
using namespace std;
int n, m, tot=1;
int trie[1001000][110];
int e[100010];
void insert_t(string s)
{
int lon=s.size();
int p=1;
for(int i=0; i<lon; i++)
{
int c=s[i]-96;
if(!trie[p][c])
tot++, trie[p][c]=tot;
p=trie[p][c];
}
e[p]++;
}
int get(string s)
{
int p=1, ans=0;
for(int i=0; i<s.size(); i++)
{
int c=s[i]-'a'+1;
if(!trie[p][c])
return ans;
p=trie[p][c];
ans+=e[p];
}
return ans;
}
int main()
{
scanf("%d%d", &n, &m);
for(int i=1; i<=n; i++)
{
string s;
cin>>s;
insert_t(s);
}
while(m--)
{
string s;
cin>>s;
printf("%d\n", get(s));
}
}