题目大意
有一堆字符串,然后每次有一个询问,问一个有多少个字符串是一个给出的字符串的前缀。
思路
这不就是trie计数板子题?
code:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<cmath>
using namespace std;
int trie[1000006][26],tot=1,end[1000006],n,m;
string x;
void insert(string x)
{
int p=1;
for (int i=0;i<x.size();i++)
{
if (!trie[p][x[i]-'a']) trie[p][x[i]-'a']=++tot;
p=trie[p][x[i]-'a'];
}
end[p]++;
}
int QuantAsk(string x)
{
int p=1,ans=0;
for (int i=0;i<x.size();i++)
{
if (!trie[p][x[i]-'a']) trie[p][x[i]-'a']=++tot;
p=trie[p][x[i]-'a'];
ans+=end[p];
}
return ans;
}
int main()
{
cin>>n>>m;
for (int i=1;i<=n;i++)
{
cin>>x;
insert(x);
}
for (int i=1;i<=m;i++)
{
cin>>x;
cout<<QuantAsk(x)<<endl;
}
return 0;
}