链接
题目描述
有一个长度为N的字符串,我们称之为母串。给定M个查询串。求对于每一个查询串,其前缀在母串上的最大匹配长度是多少呢?
样例输入
7 3
SNNSSNS
NNSS
NNN
WSEE
样例输出
4
2
0
思路
因为是AC自动机章节里的题那当然就是用AC自动机啦
用给出的查询串建树,然后跑bfs求出nxt数组
我们既然要求查询串在母串上的最大前缀匹配长度
那我们可以遍历一遍母串,能到达的点显然到根所形成的串都是母串的子串,我们对这些点做个标记
最后再用查询串匹配,看是否有标记的点就可以算出答案了
代码
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
int ch[1000006][55], bo[10000006], nxt[10000006];
int n, m, ans, tot;
char s[10000006], ss[100006][106];
int turn(char c)
{
if(c == 'E') return 0;
if(c == 'S') return 1;
if(c == 'W') return 2;
if(c == <