字符串-后缀自动机(SAM)
Maxwei_wzj
AFO
展开
-
【SPOJ7258】Lexicographical Substring Search-后缀自动机+拓补序递推
【SPOJ7258】Lexicographical Substring Search-后缀自动机+拓补序递推原创 2017-04-02 11:36:59 · 410 阅读 · 0 评论 -
【BZOJ3998】弦论(TJOI2015)-后缀自动机
测试地址:弦论 做法:本题需要用到后缀自动机。 先说点题外话:今天是一个特殊的日子,那就是本蒟蒻在BZOJ成功AC100道题啦!可喜可贺,可喜可贺…… 好了好了,话说回来,本题要求两种东西:第KKK大的子串和第KKK大本质不同的子串。一看这个数据范围,就知道O(nlogn)O(nlogn)O(n\log n)的后缀数组肯定非常拙计(当然如果你会O(n)O(n)O(n)构造就当我没说……),...原创 2018-04-02 18:58:41 · 310 阅读 · 0 评论 -
【BZOJ3238】差异(AHOI2013)-后缀自动机+树形DP
测试地址:差异 做法:本题需要用到后缀自动机+树形DP。 我们把字符串翻转,那么原串两个后缀的最长公共前缀就变成了两个前缀的最长公共后缀。注意到在后缀自动机上,两个子串的最长公共后缀就是它们在后缀链接上的LCA,那么我们先建出后缀自动机,然后在后缀链接上DP,对于每个点,求以这个点为LCA的所有前缀对对答案的贡献。状态转移方程就不写了,详见代码,算法的总时间复杂度为O(n)O(n)O(n),可...原创 2018-04-02 20:04:21 · 203 阅读 · 0 评论 -
【BZOJ3926】诸神眷顾的幻想乡(ZJOI2015)-广义后缀自动机
测试地址:诸神眷顾的幻想乡 做法:本题需要用到广义后缀自动机。 仔细读题,我们发现树的叶子节点非常少,只有202020个,那么我们把从一个叶子节点到另一个叶子节点所经过的串列出来,我们发现这些串包含树上的每条路径,证明是显然的。 接下来出现了一个问题,后缀自动机是处理单个串的子串的一个数据结构,现在我们有那么多个串,用后缀自动机好像没办法做?所以我们需要用到后缀自动机的扩展——广义后缀自动机...原创 2018-04-03 16:57:09 · 160 阅读 · 0 评论 -
【BZOJ4516】生成魔咒(SDOI2016)-后缀自动机+map
测试地址:生成魔咒 做法:本题需要用到后缀自动机+map。 看到网上一大堆后缀数组+一堆奇奇怪怪数据结构的做法,再回来看这个,肯定会感觉很小清新,这也体现了后缀自动机的优越性:支持在线在串后面添加字符并构建对应的后缀自动机。 我们知道答案等于∑len[i]−len[pre[i]]∑len[i]−len[pre[i]]\sum len[i]-len[pre[i]](pre[i]pre[i]pr...原创 2018-04-03 21:06:46 · 170 阅读 · 0 评论 -
【HDU4622】Reincarnation-后缀自动机
测试地址:Reincarnation 题目大意:给定一个字符串sss,qqq个询问,每次询问sss的一个子串s[l,r]s[l,r]s[l,r]内有多少个不同的子串。 做法:本题需要用到后缀自动机。 注意到一个子串就是一个后缀的一个前缀,而对于求一个串所有前缀中有多少个不同的子串显然可以用后缀自动机维护,所以我们对每个后缀都建一遍后缀自动机,同时求出ans(l,r)ans(l,r)ans(l...原创 2018-04-04 08:33:17 · 182 阅读 · 0 评论 -
【BZOJ2806】熟悉的文章(CTSC2012)-广义SAM+二分+DP+单调队列
测试地址:熟悉的文章 做法:本题需要用到广义SAM+二分+DP+单调队列。 首先,LLL的性质显然是单调的,所以我们二分LLL。接下来容易想到DP,令f(i)f(i)f(i)为以第iii个字符结尾的前缀最多能有多少个字符被符合条件的子串覆盖,容易得到状态转移方程: f(i)=max(f(i−1),f(i−k)+k)f(i)=max(f(i−1),f(i−k)+k)f(i)=\max(f(i-...原创 2018-05-27 15:55:34 · 231 阅读 · 0 评论 -
【BZOJ1396】识别子串-后缀自动机+线段树
测试地址:识别子串 做法:本题需要用到后缀自动机+线段树。 很快能有一个想法,就是用后缀自动机求出所有识别子串,然后在线段树上区间更新。可是识别子串的数目可能很多,直接更新会挂,这是不是就意味着不能做呢?别急,先来考虑识别子串这个性质会不会使它的分布更加特殊。 很快我们便观察到了一个事实,包含一个识别子串的所有子串都是识别子串。我们知道子串的集合就等同于所有前缀的所有后缀的集合,根据上面的性...原创 2018-08-09 12:12:12 · 284 阅读 · 0 评论 -
【BZOJ5417】你的名字(NOI2018)-后缀自动机+主席树
测试地址:你的名字 做法:本题需要用到后缀自动机+主席树。 首先考虑l=1,r=|S|l=1,r=|S|l=1,r=|S|的情况。考虑TTT的每个前缀的贡献,我们需要找到它最短的没在SSS中出现过,而且没在TTT的前面部分出现过的后缀,这样包含它的所有后缀就都是合法的贡献了。显然这个后缀的长度等同于,在SSS中出现过或者在TTT的前面部分出现过的最长的后缀的长度加111。因此我们分开考虑两种情...原创 2018-08-10 13:03:04 · 886 阅读 · 0 评论