AC自动机基础应用

前言

本篇博客既不含AC自动机定义和构建,也不含border理论。
与后缀自动机类似,AC自动机也是自动机+XX树来完成各种操作的。但AC自动机是为多主串而生的,相比之下,后缀自动机做多主串问题就麻烦得多。
AC自动机上的一个节点对应一个某串的前缀,因此AC自动机的大小是串长×字符集的。

fail树

在fail树上,一个节点的子树内的节点是以这个节点为后缀的所有前缀。
即,一个节点到根的路径是所有前缀中这个节点的所有后缀。

……
好!AC自动机的所有性质已经讲完了。下面我们来看一些应用。

查匹配次数

在自动机上走,每次在后面增加一个字符后,新的要贡献的子串是当前串的所有后缀,即当前节点到根节点的路径。因此链修改+单点查询,或单点修改+子树查询即可。

练习题

阿狸的打字机 Noi2011

题面见各大OJ。

对所有串建立AC自动机。考虑枚举y串的每一位查询x串出现了多少次,但这样时间复杂度过高,考虑统计x串结束点的子树内y串的答案。
于是用树状数组,扫一遍y串,在化实为虚树上记录y串出现位置=1,统计询问x串结束节点子树和即可。

数数 Sdoi2014

给定m个模式串,求1~n中十进制下不包含模式串的数的个数。

f[i][j][0/1][0/1]表示数位第i位,AC自动机上在节点j,是否顶上界,是否有前导零的答案。直接转移即可。

病毒 Poi2000

给定n个模式串,问是否存在一个无限长的串,其中不含模式串。

标记一下不能到的点,找是否有环即可。

魔法咒语 BJOI2017

给定 n n n个模式串, m m m个禁忌串,求有多少种模式串的拼接方案数满足拼接成的串的长度为 L L L且没有一个字串是禁忌串。

建出转移图,用矩阵快速幂优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值