A. 【例题1】前缀统计
题目
思路
字典树的模板题。
代码
#include<bits/stdc++.h>
using namespace std;
long long trie[100001][300],lt=1,n,m,end[100001];
string s;
char ch;
void in(string s)//插入字符串
{
long long n=s.size(),p=1;
for(int i=0;i<n;++i)
{
int ch=s[i]-'a';
if(!trie[p][ch]) trie[p][ch]=++lt;
p=trie[p][ch];
}
++end[p];
}
int sear(string s)//查找前缀个数
{
long long n=s.size(),p=1,ans=0;
for(int i=0;i<n;++i)
{
int ch=s[i]-'a';
p=trie[p][ch];
if(!p) break;
ans+=end[p];
}
return ans;
}
int main()
{
scanf("%lld%lld",&n,&m);
getchar();
for(int i=1;i<=n;++i)
{
cin>>s;
in(s);
}
for(int i=1;i<=m;++i)
{
cin>>s;
printf("%lld\n",sear(s));
}
}