
AC自动机
Lynstery
一只蒟蒻
展开
-
AC自动机——学习笔记
什么是自动机是一种数学模型,大概就是由一堆状态和状态转移规则等东西构成,能与外界交换信息,并改变动作。 这个是理论上的东西,了解就行,对AC自动机的理解没有大影响。什么是AC自动机?通俗的讲就是在Trie上做kmp,处理多模式串匹配问题。 Trie 的每个结点就是一个状态,根结点是初始状态。 AC自动机的行为被定义为一下3个函数: 1. next函数 ch(q,a):返回从当前状态q走值为a原创 2017-03-07 20:32:18 · 471 阅读 · 0 评论 -
[AC自动机 + DP] BZOJ1030: [JSOI2007]文本生成器
题意给出n个单词。若一个字符串至少包含一个单词,就称这个字符串是”可读的”。 求长度为m的”可读的”字符串个数。所有字符都在[A,Z]范围。 n,m<=100题解首先一步转化,我们从补集考虑统计ans表示一个单词都不包含的串数,则答案为m26−ansm^{26}-ans。 多串匹配问题肯定要想到AC自动机。 我们要求的是长度为m的字符串没有匹配任何串的方案数。 长度对应AC自动机上走的次数原创 2017-05-01 20:10:40 · 498 阅读 · 0 评论 -
[SAM] Spoj1811 LCS - Longest Common Substring
题意求两个串 s1s1 , s2s2 的最长公共子串。 |s1|,|s2|≤250000|s1|,|s2| \le 250000题解SAMSAM 模板题。 先建出 s1s1 的 SAMSAM ,然后把 s2s2 放上去跑。 考虑当且处理到第 ii 位,若 pp 出发有标号为 s2[i]s2[i] 的边,就直接走,该阶段答案为上次加 11 . 若没有标号为 s2[i]s2[i] 的边,就走 p原创 2017-07-27 23:48:24 · 464 阅读 · 0 评论 -
[数位DP + AC自动机] Codeforces #434C. Tachibana Kanade's Tofu
相当于是在数位DP时带了一个多模式串的匹配,每加一个字符,就要算出多匹配了哪些,直接AC自动机。#include<cstdio>#include<queue>#include<cstring>#include<algorithm>#define nxt(i,j) nd[i]->ch[j]->id#define w(i) nd[i]->cntusing namespace std;con原创 2017-09-22 18:02:04 · 375 阅读 · 0 评论 -
[DP+AC自动机] BZOJ1212: [HNOI2004]L语言
直接 DPDP,fif_{i} 表示前 ii 个是否合法。fi|=fi−len(aj)(s[i−len(aj)+1]=aj)f_{i}|=f_{i-len(a_j)}(s[i-len(a_j)+1]=a_j) 用ACAC自动机加速转移的匹配过程。#include<cstdio>#include<queue>#include<algorithm>#include<cstring>using原创 2017-11-26 16:33:05 · 367 阅读 · 0 评论