摘要: P4799 [CEOI2015 Day2]世界冰球锦标赛 折半搜索模板题(\(Meet\) \(In\) \(The\) \(Middle\)) 大概就是我们搜索前面一半所有数可能的所有结果和后面所有数可能的所有结果,然后把它们拼起来即可。 具体怎么拼? 这道题里就是要求和不超过一个数,于是我们直接 阅读全文
posted @ 2021-04-19 21:05 __Anchor 阅读(38) 评论(0) 推荐(0) 编辑
摘要: CF86C Genetic engineering(AC 自动机 + DP) AC 自动机 + DP,还不怎么会,这里只说一下状态的设计: dp[len][x][k]表示长度len且后缀状态为自动机结点x且后k位还不满足要求的方案数。 具体可以看这篇题解。 阅读全文
posted @ 2021-04-19 21:02 __Anchor 阅读(55) 评论(0) 推荐(0) 编辑
摘要: CF163E e-Government(AC 自动机+ BIT + dfn 序 + LCA + 序列上差分) 这么多东西搞在一起其实也没有很难。。 其实我们可以发现,题目就是让我们求每一个串作为某个串的子串出现次数之和。(好像更难理解了。) 看一下样例就知道了.. input: 1 3 a aa a 阅读全文
posted @ 2021-04-19 20:12 __Anchor 阅读(49) 评论(0) 推荐(0) 编辑
摘要: P2336 [SCOI2012]喵星球上的点名(AC 自动机 + BIT + dfn 序 + LCA ) 这道题除了 AC 自动机中 Fail 树本身的性质,与其他题目最大不同是它 AC 自动机的建立。 这道题的字符集特别大,所以我们不能和以前一样直接存下来,于是可以想到用 Map 维护每个点可以到 阅读全文
posted @ 2021-04-19 20:10 __Anchor 阅读(78) 评论(0) 推荐(0) 编辑
摘要: P5840 [COCI2015]Divljak(AC自动机+LCA+BIT) 我们发现对 \(T\) 集合建 AC 自动机非常的不好做(又要动态),所以我们考虑对 \(S\) 建 AC 自动机,然后每个 \(T\) 加入的时候都相当于修改一些节点的权值。 这里我们可以差分一下,把求点转化成求子树和, 阅读全文
posted @ 2021-04-19 20:09 __Anchor 阅读(72) 评论(0) 推荐(0) 编辑
摘要: CF1437G Death DBMS(AC自动机+树剖) 修改就是直接在建出来的 Fail 树上的对应 \(endpos\) 处修改(对应后文的单点修)。 重点是询问,考虑这个询问对应到 AC 自动机上面是什么:当前串的子串 >当前串每一个前缀的 Fail 树上的祖先。 也就是说就是询问一个点到根的 阅读全文
posted @ 2021-04-19 20:07 __Anchor 阅读(50) 评论(0) 推荐(0) 编辑
摘要: CF710F String Set Queries(AC自动机+二进制分组) 非常牛逼的一道题。根据题意,就是动态的 AC 自动机(动态加字符串,删除字符串,查询所有串在模板串出现次数) 然后询问就是可以预处理每个点作为 \(endpos\) 的次数,对于一个串查其所有前缀的对应到根的边权总和。(直 阅读全文
posted @ 2021-04-19 20:06 __Anchor 阅读(47) 评论(0) 推荐(0) 编辑
摘要: CF1202E You Are Given Some Strings... 题意: 直接拼不行,于是我们直接枚举原串的断点(注意这个技巧)。 然后发现对于每个拼接其实就是 AC 自动机,首先,我们由 Fail 树的性质—————不断跳到当前前缀的后缀的位置,可以得出当前点的后缀串匹配的个数就是 \( 阅读全文
posted @ 2021-04-19 20:04 __Anchor 阅读(51) 评论(0) 推荐(0) 编辑
摘要: P2414 [NOI2011] 阿狸的打字机 首先根据题意模拟可以建出 AC 自动机。 然后我们发现,对于每一个询问 \((x,y)\) ,对于 AC 自动机来说,其实就是在询问在 Fail 树上以 \(x\) 为根的子树内,有多少个 \(y\) 的前缀的标记。 解释一下为什么:因为一个结点 \(x 阅读全文
posted @ 2021-04-19 20:03 __Anchor 阅读(46) 评论(0) 推荐(0) 编辑
摘要: UVA11019 Matrix Matcher 题意: 给定两个字符矩阵 \(A\) 和 \(B\) ,求 \(A\) 中有多少个子矩阵和 \(B\) 完全相同。 解答: 最开始毫无思路,但是我们可以根据 “二维字符矩阵匹配” 转化成 “一维字符串匹配”。 于是我们可以想到先将 \(A\) 和 \( 阅读全文
posted @ 2021-04-19 20:02 __Anchor 阅读(32) 评论(0) 推荐(0) 编辑
摘要: 【模板】AC自动机(加强版) 这道题就是把原本 \(endpos\) 的位置打上的标记换成了串的编号而已,注意处理一下映射即可。 阅读全文
posted @ 2021-04-19 20:01 __Anchor 阅读(40) 评论(0) 推荐(0) 编辑
摘要: 【模板】AC自动机(二次加强版) 【模板】AC自动机(二次加强版) 对于 \(S\) 的每一个前缀,先在对应位置打上标记(因为 AC 自动机 Fail 的性质),然后我们对 Fail 树来一遍拓扑排序,类似树上差分的思路,不停地累计即可(为什么能累计:因为 AC 自动机 Fail 的性质)。 扩展 阅读全文
posted @ 2021-04-19 20:00 __Anchor 阅读(48) 评论(0) 推荐(0) 编辑
摘要: 【模板】AC自动机(二次加强版) 【模板】AC自动机(二次加强版) 对于 \(S\) 的每一个前缀,先在对应位置打上标记(因为 AC 自动机 Fail 的性质),然后我们对 Fail 树来一遍拓扑排序,类似树上差分的思路,不停地累计即可(为什么能累计:因为 AC 自动机 Fail 的性质)。 扩展 阅读全文
posted @ 2021-04-19 19:59 __Anchor 阅读(48) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2021-04-19 19:58 __Anchor 阅读(2) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2021-04-19 19:16 __Anchor 阅读(0) 评论(0) 推荐(0) 编辑
摘要: P3121 [USACO15FEB]Censoring G AC 自动机 多模式串匹配问题。 首先我们对所有模式串建立一个 ACAM 。 然后我们把文本串放上去匹配,当我们匹配到一个带标记的点的时候,说明我们目前出现了一个串,那么检查当前是否可以匹配完全,可以的话我们会直接相当于现在说明都没有匹配, 阅读全文
posted @ 2021-04-19 18:49 __Anchor 阅读(51) 评论(0) 推荐(0) 编辑
摘要: P3285 [SCOI2014]方伯伯的OJ 大概是需要两个平衡树来维护,一个是按排名为序,一个是按照在第一个树内的编号为序。 动态开点平衡树? 似乎和 P3960 [NOIP2017 提高组] 列队 很像? 阅读全文
posted @ 2021-04-19 18:10 __Anchor 阅读(27) 评论(0) 推荐(0) 编辑
摘要: 作用 李超树是拿来维护线段或者直线,支持动态插入线段/直线,和询问在某一单点的最大值线段。 其实就是维护了一个动态凸包。 实际上就是维护了一个“最优势线段”和“标记永久化”。 常常用来维护斜率优化 dp 。 实现 插入直线 首先是插入直线,查询单点的实现: 要记住的地方: \(1.\) \(Modi 阅读全文
posted @ 2021-04-19 16:32 __Anchor 阅读(64) 评论(0) 推荐(0) 编辑
摘要: P3648 [APIO2014]序列分割 首先,我们发现这个数据范围明显就是 \(O(nk)\) 的。 那么我们可以考虑直接 dp 了,设 \(dp[i][j]\) 为前 \(i\) 个数划分完毕,划分了 \(j\) 次,最后一次划分在 \(i\) 位置的最大贡献。 那么我们的柿子很明显就是 \(d 阅读全文
posted @ 2021-04-19 16:13 __Anchor 阅读(49) 评论(0) 推荐(0) 编辑
摘要: P3628 [APIO2010]特别行动队 首先发现这个是划分区间,可以考虑 dp。 然后这个区间求和很明显可以做一遍前缀和。 接下来很明显就是一个斜率优化dp了。 可以动态开点李超树,也可以单调队列优化。 代码: #include<bits/stdc++.h> using namespace st 阅读全文
posted @ 2021-04-19 15:54 __Anchor 阅读(54) 评论(0) 推荐(0) 编辑