AC自动机 洛谷P3796 模板
题目链接: https://www.luogu.org/problem/P3796 题意:给多个模式串和一个文本串,要求出模式串匹配最多的次数是多少,并输出这些次数的模式串。 分析:求匹配次数很明显,把AC_qurey函数稍微改一下就好,但要输出这些模式串我就迷了,当时认为Trie只能上到下,到了一个结点无法回到其上的结点,就不会了,事实上还是很浅显,另外用一个数组记录位置就好了啊。。。。将字典树结点中的end改为只有其是一个单词的结尾才做标记,并且标记这个单词的次序。 clean函数应该就是AC自动机里的初始化了,因为不知道会用到多少边,故是每当cnt增加了(即出现了新的一条边)的时候我们再初始化 #include<bits/stdc++.h> using namespace std; const int maxn=1e6+10; const int inf=0x3f3f3f3f; typedef long long ll; #define meminf(a) memset(a,0x3f,sizeof(a)) #define mem0(a) memset(a,0,sizeof(a)); struct result{ int num,pos; }ans[200]; bool cmp(const result &a,const result &b){ if(a.num==b.num)