题目:https://www.luogu.org/problemnew/show/P2444 AC自动机上 dfs,不走结尾点,如果走出环就是有无限长度的串: RE无数,原来是数组开成 2000 的了... 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; ,xm=…
题目链接 这么多字符串,肯定是自动机啦. 先建出AC自动机,然后怎么表示一个安全代码没有病毒代码呢? 就是存在一条路径不经过有病毒代码段结尾的节点呗. 所以呢?有环啊!dfs一下救星了. #include <cstdio> #include <queue> #include <cstring> #include <cstdlib> using namespace std; struct Node{ int fail, next[2], num; }AC[10…
洛谷题目传送门 先膜一发yyb巨佬 orz 想学ac自动机的话,推荐一下yyb巨佬的博客,本蒟蒻也是从那里开始学的. 思路分析 裸的AC自动机,这里就不讲了.主要是这题太卡时了,尽管时限放的很大了...... 用传统方法匹配时,每走到一个新位置,都是要统计答案的.怎么统计呢?暴力跳\(fail\),把沿路上能够产生答案的算上,直到跳到根才停下来.这里的时间复杂度是 \(O(70N)\),在有多组数据的情况下其实是很吃亏的.(蒟蒻用了\(fread\),根据目测,最大的一个点输入大小在\(30MB…
原题链接 前置知识: 字典树.(会 \(\texttt{KMP}\) 就更好) 显然呢,本题用 字典树 和 \(\texttt{KMP}\) 无法解决问题. 所以我们发明了一个东西: \(\texttt{AC}\) 自动机! 自动AC就算了吧 首先,我们给这些串建字典树. 建完之后,我们求 失配指针 . 这是干嘛的?求完再说. 它表示以 \(i\) 节点为 结尾 的串的 后缀 有最大公共长度的 前缀的 结尾 编号. 可能有点绕,但是字符串匹配算法,一开始就是雾里云里,后来就是拨云见雾. 引用一张…
原题链接 Description 模板题啦~ Code //[模板]AC自动机(加强版) #include <cstdio> #include <cstring> int const N=2e5; int const L=1e6+10; int n; char s1[200][80],s2[L]; int rt,ndCnt; int ch[N][26],val[N],fail[N],pre[N]; void ins(char s[],int id) { int len=strlen…
题目背景 这是一道简单的AC自动机模板题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保证正确的基础上只有两组数据,请不要恶意提交. 管理员提示:本题数据内有重复的单词,且重复单词应该计算多次,请各位注意 题目描述 给定n个模式串和1个文本串,求有多少个模式串在文本串里出现过. 输入输出格式 输入格式: 第一行一个n,表示模式串个数: 下面n行每行一个模式串: 下面一行一个文本串. 输出格式: 一个数表示答案 输入输出样例 输入样例#1: 2 a aa aa 输出样例#1: 2 说明 su…
正解:AC自动机+dp 解题报告: 传送门! 感觉AC自动机套dp的题还挺套路的,,, 一般就先跑遍AC自动机,然后就用dp dp的状态一般都是f[i][j]:有i个字符,是ac自动机上的第j个节点,然后有的题目可能还要加一维用来满足一些额外要求之类的 然后听说矩阵优化dp挺常见的,,,但我还没做过这种题QAQ 然后这题就直接很套路啊,,,直接上面那种套路一点修改都没有,,, 就显然答案是所有状态-非法状态 所有状态就26m 非法状态就上面那个套路算下 然后就做完了呢,,, 放下代码趴QAQ #…
正解:AC自动机+dp 解题报告: 传送门! 首先看到多串匹配balabala显然想到建个AC自动机? 然后可以用一点儿数位dp的思想地想下(,,,其实并不算QAQ 幸运数可以分为两类:位数<n的和位数=n的 下面分别考虑下 对位数<n的,相当于就没有任何约束,直接dp转移下就好 然后对位数=n的,另外做一次dp,然后多设一组状态表示当前是否相等(就和数位dp差不多的那种,,, 最后加起来就欧克! 啊说得好潦草,,,算了反正就大概这个意思,看下代码趴QwQ #include<bits/s…
题目背景 这是一道简单的AC自动机模板题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保证正确的基础上只有两组数据,请不要恶意提交. 管理员提示:本题数据内有重复的单词,且重复单词应该计算多次,请各位注意 题目描述 给定n个模式串和1个文本串,求有多少个模式串在文本串里出现过. 输入输出格式 输入格式: 第一行一个n,表示模式串个数: 下面n行每行一个模式串: 下面一行一个文本串. 输出格式: 一个数表示答案 输入输出样例 输入样例#1: 2 a aa aa 输出样例#1: 2 说明 su…
https://vjudge.net/problem/UVALive-4670 中文题面:https://www.luogu.org/problem/show?pid=3796 AC自动机模板 注意如果有重复字符串,要输出所有的重复字符串 可以用重复字符串中标号最小的字符串来表示所有的重复字符串 例: aba abba aba aba出现了2次, 令mp[1]=mp[3]=1 代码实现的话,只需要在insert的最后判断, 如果这个单词节点还没有标记,标记上这个单词的编号 如果有标记,令当前单词…