![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
AC自动机
lajiyuan_
已经退役啦,会不定期更新cf博客 or 其他计算机知识相关的博客.
展开
-
AC自动机模板以及简单的入门题总结
AC自动机模板//AC自动机解决一类文本串匹配多关键字的问题//fail就是Trie上的next,当失配时直接跳转到下一个节点,继续匹配//insert_()前要init(),query_()之前要build().//要充分利用end_数组来存储状态//AC自动机其实就是长度为k的字符串转移到长度为k+1的串的转移状态//若当前共有cnt个节点,则转移共有cnt*MAX个,MAX...原创 2018-06-13 18:47:00 · 740 阅读 · 0 评论 -
【HDU 2222 Keywords Search】 AC自动机(模板题)
HDU2222 题意就是统计一个文本串中出现过多少个给定的字符串,每个给定的字符串只统计一次。 这就是AC自动机的裸题,我们直到AC自动机的精髓在于状态转移,我们可以从k状态转移到k+1的状态,所以我们只需要把文本串放到AC自动机上面沿着Trie树跑,然后用Fail来递归寻找出现过的前缀,统计贡献就好了,注意统计贡献的时候要将贡献清空,否则一个字符串将统计多次 HDU2222代码#i...原创 2018-06-13 19:29:01 · 174 阅读 · 0 评论 -
【HDU 2896 病毒侵袭】 AC自动机
HDU2896 题意就是给你一些病毒网站的关键字,再给你一些网站链接,问每个网站出现过哪些病毒网站关键字 我们只需要用病毒网站关键字构建出AC自动机,之后对每个网站开一个set存储与见过的病毒网站关键字下标就可以了,注意本题字符为ASCII码可见字符,所以tree[][]数组第二维要开到128 HDU2896代码#include<stdio.h>#include<...原创 2018-06-13 19:30:21 · 127 阅读 · 0 评论 -
【HDU 3065 病毒侵袭持续中】AC自动机
HDU3065 题意就是给你一些病毒网站关键字,统计每个关键字的出现次数,可重叠。 我们用病毒网站关键字搭建好AC自动机,用文本串在上面跑,由于每个Fail递归的过程是必包含当前后缀的(仔细思考),所以是不会出现重复统计的情况的,所以我们只需要在递归的时候对每个关键字计数,最后输出就可以了。 注意:多组输入,ASCII码可见字符有128种 HDU3065代码#include<...原创 2018-06-13 19:31:46 · 116 阅读 · 0 评论 -
【ZOJ 3430 Detect the Virus】 AC自动机
ZOJ3430 题意就是给你一个加密的单词,加密方式就是先把字符按照ASCII表转为2进制,再截取6个为一段转为10进制,再去表中改为对应字符。 我们只需要把所有关键字和文本串都解码之后,就是一个最朴素的AC自动机了。 密文转换方法是向kuangbin大神学习的,我们通过思考可以发现,解码的过程就是把四个字符转换为3个字符的过程,所以我们只要对加密串进行一些二进制操作,就可以直接将24位二进...原创 2018-06-13 19:32:48 · 244 阅读 · 0 评论 -
【POJ 2778 DNA Sequence】 AC自动机+DP+矩阵快速幂
POJ2778 本题题意是给你一个字符集和一个长度m,还有一些敏感串,求出字符集构造出的长度为m的字符串中不包含敏感串的串的个数。 我们用到AC自动机的性质,想象一下如果从len=k向len=k+1转移,AC自动机上每个状态之间有多少种转移方法,就可以构造出对应的转移矩阵,再利用矩阵快速幂就可以求解。在构造转移矩阵的时候,要注意如果某串的后缀是敏感串,也是不可以转移的。 转移矩阵TnTnT^...原创 2018-06-13 19:35:07 · 125 阅读 · 0 评论 -
【HDU 2243 考研路茫茫——单词情结】 AC自动机+DP+矩阵快速幂
HDU2243 在做本题之前推荐做POJ2778 题解 POJ2778求的是用给定字符集构造出的长度为n的字符串中没出现过给定字符串的字符串有多少个 本题统计的是出现过的,那么我们只需要算出一共可能的种数,再算出长度为1-n可能的出现过给定字符串的字符串个数,相减就是答案。 首先,我们先计算一共可能的种数, 设f[i]=261+262+.....26if[i]=261+262+.......原创 2018-06-13 19:37:27 · 139 阅读 · 0 评论 -
【UVA 11019 Matrix Matcher 】 二维Hash+尺取 / 二维AC自动机
UVA-11019 本体题意就是给你AB两个字符矩阵,问你B矩阵在A矩阵中的出现次数。 我们可以进行二维hash,其实就是把n个横向串连在一起hash。 注意判相等的时候,我们不断进行尺取+hash,尺取的过程,我们删除当前第一行的hash值加上最后一行的hash值,删除第一行的hash值直接删去就可以 例如 AAAAAAAAA BBBBBBBBB CCCCCCCCC 我们删去第一...原创 2018-06-18 13:01:00 · 221 阅读 · 0 评论