AcWing 142. 前缀统计(模板题)

题目链接:点击这里

在这里插入图片描述

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>

using namespace std;

const int N = 1000010, M = 500000;
int n, m;

int son[M][26], cnt[N], idx;
char str[N];

void insert()
{
	int p = 0;
	for(int i = 0; str[i]; ++i)
	{
		int s = str[i] - 'a';
		if(!son[p][s])	son[p][s] = ++idx;
		p = son[p][s];
	}
	cnt[p]++;
}

int search()
{
	int p = 0, res = 0;
	for(int i = 0; str[i]; ++i)
	{
		int s = str[i] - 'a';
		if(!son[p][s])	break;
		p = son[p][s];
		res += cnt[p];
	}
	return res;
}

int main()
{
	scanf("%d%d", &n, &m);
	while(n--)
	{
		scanf("%s", str);
		insert();
	}
	
	while(m--)
	{
		scanf("%s", str);
		printf("%d\n", search());
	}
	
	return 0;
} 
发布了727 篇原创文章 · 获赞 111 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_42815188/article/details/104301658