这是树的简单运用。经典例题
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1000000;
int a[N][26],b[N];
char s[N];
ll t=0;
void trie()
{
ll p=0;
ll l=strlen(s);
for(ll i=0;i<l;i++)
{
if(a[p][s[i]-'a']==0)
a[p][s[i]-'a']=++t;
p=a[p][s[i]-'a'];
}
b[p]++;
}
void search()
{
ll flag=0;
ll p=0;
ll l=strlen(s);
for(ll i=0;i<l;i++)
{
if(a[p][s[i]-'a']==0)
break;
p=a[p][s[i]-'a'];
flag+=b[p];
}
cout<<flag<<endl;
}
int main()
{
ll n,m;
cin>>n>>m;
while(n--)
{
cin>>s;
trie();
}
while(m--)
{
cin>>s;
search();
}
return 0;
}