
AC自动机
AC自动机
C202044zxy
这个作者很懒,什么都没留下…
展开
-
[BJOI2019]奥术神杖
一、题目点此看题二、解法首先 kx=x1/kk\sqrt{x}=x^{1/k}kx=x1/k,对于这种指数的问题我们可以用ln\lnln把它转化为系数,同时取ln\lnln:lnans=1c∑i=1clnv[i]\ln ans=\frac{1}{c}\sum_{i=1}^c \ln{v[i]}lnans=c1i=1∑clnv[i]然后上式很像ln\lnln平均值的最大值,我...原创 2020-03-05 08:12:47 · 187 阅读 · 0 评论 -
CF587F Duff is Mad
一、题目点此看题二、解法这道题没有什么优秀的解法,首先可以把一个询问拆成两个,我们考虑两个暴力算法。我们可以离线询问,枚举到iii的时候加入sis_isi在AC\text{AC}AC自动机上的最后一个点,直接让failfailfail树上子树全部+1+1+1即可,然后回答对应的询问,把这个字符串对应在自动机上的所有点权值拿到即可,这种算法的复杂度是O(n2logn)O(n^2\log ...原创 2020-02-25 08:35:07 · 297 阅读 · 0 评论 -
CF1038F Wrap Around
一、题目点此看题二、解法题目中的循环节有点吓人,我们可以把它变成文本串倍长之后是否包含模式串。正难则反,我们求出不包含的所有方案数,用所有方案减去即可。先建出AC\text{AC}AC自动机,我们枚举文本串的后缀能够匹配到点iii,设f[len][j][k]f[len][j][k]f[len][j][k]为当前处理到的长度为lenlenlen,前缀匹配到的点为jjj,后缀加上前缀能够匹配...原创 2020-02-24 10:05:47 · 280 阅读 · 0 评论 -
[HDU 4117] GRE Words
一、题目点此看题二、解法判断子串可以理解为在failfailfail链上是否出现过。假设我们要知道dp[i]dp[i]dp[i](选到iii的最大权值),并且我们已经知道了dp[1...i−1]dp[1...i-1]dp[1...i−1],我们可以把以前求出来的dpdpdp值更新failfailfail树上的子树的权值,算dp[i]dp[i]dp[i]的时候我们边匹配边获取以前标记的最大权值...原创 2020-02-23 22:42:46 · 218 阅读 · 0 评论 -
CF710F String Set Queries
一、题目点此看题二、解法本题要求强制在线,但是蒟蒻作者只会离线,也讲一讲吧,虽然和本题关系不大,不想听的巨佬可以跳过这一部分。可以先把所有111操作的字符串插入AC\text{AC}AC自动机,然后回到第一步,插入和删除都可以看作对failfailfail字符的区间加减,询问直接在当前时刻的自动机上跳就行了。那离线怎么做呢?首先删除可以理解成插入自动机和删除自动机的差分,那删除也就变成...原创 2020-02-23 14:58:22 · 204 阅读 · 0 评论 -
CF696D Legen...
一、题目点此看题二、解法定义dp[i][j]dp[i][j]dp[i][j]为长度为iii,匹配到jjj,看到文本串这么大就知道要用矩阵加速了吧。我们先构造出一步的矩阵,然后把它lll次方,找第000行的最大值即可。#include <cstdio>#include <cstring>#include <iostream>#include <...原创 2020-02-23 11:21:36 · 217 阅读 · 0 评论 -
CF86C Genetic engineering
一、题目点此看题二、解法可以把题目给的限制当成模式串覆盖文本串,最后要求文本串的每个位置都被覆盖,结合套路,我们定义f[i][j][k]f[i][j][k]f[i][j][k]为还剩长度iii,当前匹配到的点是jjj,还未覆盖的一段后缀长度为kkk的方案数。转移枚举下一位字符,我们对于AC\text{AC}AC自动机上的每个点维护一个最大匹配长度(failfailfail链上的),如果跳到...原创 2020-02-23 10:37:29 · 445 阅读 · 0 评论 -
[POI2000]病毒
一、题目点此看题二、解法先对原串建出AC\text{AC}AC自动机,我们可以同过这种方式构造无线长的串:从一个点开始走若干步,再通过失配指针跳回来。这就告诉我们只要在自动机上找到了环,那么就说明可以构造出一个无线长的安全串,当然要保证途中不能经过非安全的点,在一开始标记一下即可。时间复杂度O(n)O(n)O(n),口胡可能难以理解,看代码把。#include <cstdio>...原创 2020-02-22 11:02:22 · 274 阅读 · 0 评论 -
[BJOI2017]魔法咒语
一、题目点此看题二、解法观察数据范围,发现这道题需要对数据分类讨论。0x01 l<=100在AC\text{AC}AC自动机上dpdpdp,设f[i][j]f[i][j]f[i][j]为长度为iii,在自动机上匹配到了点jjj,暴力转移即可。0x02 l<=1e8 且 基本词汇长度不超过2这种数据最大的特点就是f[i]f[i]f[i]只可能从f[i−1],f[i−2]f[...原创 2020-01-31 17:22:17 · 295 阅读 · 0 评论 -
[SDOI2014]数数
一、题目点此看题二、解法本篇题解受这位大佬的启发,在此感谢。数据太水,但是此方法能通过hackhackhack数据,原创 2020-01-31 12:24:10 · 254 阅读 · 0 评论 -
[TJOI2013]单词
一、题目点此看题二、解法考虑计算方法,在自动机上匹配是再暴力跳failfailfail,一个单词出现的次数就是被跳到的次数。在插入时就把一路打上标记,然后在failfailfail树上用这些标记树上差分,最后直接统计即可,时间复杂度O(n)O(n)O(n)。#include <cstdio>#include <cstring>#include <vect...原创 2020-01-31 10:32:56 · 266 阅读 · 0 评论 -
[USACO15FEB]审查
一、题目点此看题二、解法本题最重要的条件是:列表中的单词不会出现一个单词是另一个单词子串的情况,所以下图的情况是不可能出现的(大包含小,却删掉了小)。所以就是AC\text{AC}AC自动机板题了,用栈维护一下就行了,时间复杂度O(n)O(n)O(n)。#include <cstdio>#include <cstring>#include <queue...原创 2020-01-31 10:15:20 · 184 阅读 · 0 评论 -
[USACO12JAN]视频游戏的连击
一、题目点此看题二、解法又是一道AC\text{AC}AC自动机上dpdpdp的题,随手乱切。设f[i][j]f[i][j]f[i][j]为长度为iii,在自动机上匹配到jjj点的最大值,一开始全赋最小值,在failfailfail树上求一个链的前缀和,直接转移即可,时间复杂度O(3×15×nk)O(3\times 15\times nk)O(3×15×nk),贴个代码。#include...原创 2020-01-30 21:57:06 · 157 阅读 · 0 评论 -
[JSOI2007]文本生成器
一、题目点此看题二、解法AC\text{AC}AC自动机上dpdpdp,这里有一个加强版设f[i][j]f[i][j]f[i][j]为长度为iii,匹配到了自动机上的点jjj。dpdpdp时直接暴力转移即可,注意当出现了一个认识的单词后立即算贡献,未填的随便选,停止它的转移。时间复杂度O(26×100×nm)O(26\times 100\times nm)O(26×100×nm),贴个代...原创 2020-01-30 21:29:59 · 174 阅读 · 0 评论 -
[SCOI2012]喵星球上的点名
一、题目点此看题二、解法0x01 AC自动机如果字符集没有这么大的话,就是AC\text{AC}AC自动机的板题。我们可以开mapmapmap存转移,然后就完了,写了之后对mapmapmap的理解会有所提升吧,虽然是过不了luoguluoguluogu的...原创 2020-01-30 18:02:42 · 221 阅读 · 0 评论 -
[CQOI2014]通配符匹配
一、题目点此看题弱化版:[AHOI2005]病毒检测二、解法先把*当成分割符,这样带通配符的串就被划分成了若干个小串,我们对于每一个小串在去另一个串中匹配。对于每一个小串,以?为分割符,将它插入AC\text{AC}AC自动机中,标记终止节点,把在小串中的终止位置存在ed[x]ed[x]ed[x]中(类型为vectorvectorvector),然后我们把一个点在failfailfail...原创 2020-01-30 16:18:50 · 407 阅读 · 0 评论 -
[NOI2011]阿狸的打字机
一、题目电磁看题二、解法我们先对输入的字符串建出ACACAC自动机,自动机的点数是O(n)O(n)O(n)的,建法如下:遇到小写字母,跳自动机上的边,看是否需要新建点。遇到P,存下字符串对应在自动机上的点编号。遇到B,向当前点的父亲上跳。考虑xxx串在yyy串的出现次数,具体过程就是在自动机上跳到yyy,路径上的每一个点都去跳failfailfail,跳到xxx对应点的次数即为出...原创 2020-01-30 12:08:42 · 182 阅读 · 0 评论