《ybtoj高效进阶》第二部分第四章例题1 前缀统计

题目大意

有一堆字符串,然后每次有一个询问,问一个有多少个字符串是一个给出的字符串的前缀。

思路

这不就是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;
}

猜你喜欢

转载自blog.csdn.net/weixin_49843717/article/details/115218627
今日推荐