
【数据结构】AC自动机
cz_xuyixuan
这个作者很懒,什么都没留下…
展开
-
【BZOJ3172】【TJOI2013】单词
【题目链接】点击打开链接【思路要点】对单词集建立AC自动机,将单词用不可见字符连接,作为母串,放入AC自动机即可。时间复杂度\(O(∑|S|)\)(Fail树上差分+DFS),\(O(N*∑|S|)\)(暴力更新答案),均可通过。【代码】#includeusing namespace std;#define MAXN 1200原创 2018-01-15 11:03:22 · 327 阅读 · 0 评论 -
【省内训练2019-06-29】Strings
【思路要点】在 ACACAC 自动机上记 dpi,j,0/1dp_{i,j,0/1}dpi,j,0/1 表示从节点 iii 出发走 jjj 步,走过 / 不走过关键点的方案数。dpdpdp 完了逐位确定答案就行了。时间复杂度 O(L×∑∣Si∣)O(L\times\sum|S_i|)O(L×∑∣Si∣) 。【代码】#include<bits/stdc++.h>...原创 2019-06-29 15:04:50 · 379 阅读 · 0 评论 -
【BZOJ4231】回忆树
【题目链接】点击打开链接【思路要点】分开处理路径上竖直的字符串和在 LcaLcaLca 处拐弯的字符串。在 LcaLcaLca 处拐弯的字符串总数在 O(∑∣S∣)O(\sum|S|)O(∑∣S∣) 级别,可以直接 KmpKmpKmp 判断。竖直的字符串可以在离线询问后通过 ACACAC 自动机和树状数组处理。时间复杂度 O(NLogN+MLogN+∑∣S∣)O(NLogN...原创 2019-04-22 14:54:01 · 584 阅读 · 0 评论 -
【CodeForces】CodeForces Global Round 1 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Parity【思路要点】分 bbb 的奇偶性讨论即可。时间复杂度 O(k)O(k)O(k) 。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 2e5 + 5;typedef long long l...原创 2019-02-14 13:55:38 · 919 阅读 · 2 评论 -
【省内训练2018-11-23】Palindrome
【思路要点】考虑从两端向中间 dpdpdp 。对于此类匹配问题,考虑建立 ACACAC 自动机来描述状态。对 SSS 集合建立 ACACAC 自动机 AAA ,对 SSS 集合中所有串的反串建立 ACACAC 自动机 BBB 。记 dpi,j,k,0/1dp_{i,j,k,0/1}dpi,j,k,0/1 表示决策了最终字符串开头和结尾的 iii 个字符,在 AAA 上的匹配到的节点为...原创 2018-11-24 17:00:04 · 342 阅读 · 0 评论 -
【BZOJ3940】【Usaco2015 Feb】Censoring
【题目链接】 点击打开链接 【思路要点】 对模式串的集合建立AC自动机,让主串在上面匹配,每遇到一个模式串的末尾便将其删去即可。 时间复杂度O(∑|S|)O(∑|S|)O(\sum|S|)。 【代码】 #include<bits/stdc++.h>using namespace std;const int MAXN =...原创 2018-07-03 13:53:53 · 327 阅读 · 0 评论 -
【BZOJ3530】【SDOI2014】数数
【题目链接】点击打开链接【思路要点】对模式串建立AC自动机,在上面数位DP即可。注意模式串可能包含前导零。时间复杂度\(O(N*L)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 2005;const int P = 1e9 + 7;template <typename T> vo...原创 2018-05-23 11:20:04 · 228 阅读 · 0 评论 -
【CodeForces86C】Genetic engineering
【题目链接】点击打开链接【思路要点】考虑在AC自动机上DP,先建出AC自动机。记\(dp_{i,j,k}\)表示当前字符串共有\(i\)位,其在AC自动机上匹配的节点为\(j\),并且这个字符串的最后\(k\)位还没有被任何\(s\)中的字符串覆盖的字符串个数。转移只需要考虑向\(j\)的每个出点转移即可,是\(O(1)\)的。具体转移比较显然,建议读者自行推导一下,如仍不清楚,可以阅读一下这份代...原创 2018-03-14 15:00:46 · 411 阅读 · 0 评论 -
【校内训练2019-07-11】大水题
【思路要点】考虑没有修改的情况,建立 TTT 的 ACACAC 自动机,用线段树维护 SSS 。在线段树上维护从自动机上任意一点出发,经过区间中每一个字符后产生的匹配次数 cnkcnkcnk ,以及到达的节点 destdestdest ,合并该信息是 O(∑∣T∣)O(\sum|T|)O(∑∣T∣) 的。有修改时,我们需要能够对被赋值的区间快速计算所维护的区间。即我们需要快速计算形如 ...原创 2019-07-11 15:08:47 · 410 阅读 · 0 评论