
后缀自动机
文章平均质量分 87
Rayment_cc
++Rp
展开
-
后缀自动机入门
转载声明 本蒟蒻看了好久后缀自动机都没看懂,直到看了这篇……所以就转载下来了!当然是作者大大允许了之后 作者:shadowice1984 原文地址:作者大大的blog 太菜了现在才会SAM 网上的教程实在太玄学了…… 但是如果想要了解后缀自动机一些比较棒的性质还是有必要了解的 但是这些几乎对大家码代码几乎没啥用…… 所以这里写一篇后缀自动机(suffix automaton,S...转载 2018-05-03 11:08:46 · 1907 阅读 · 0 评论 -
洛谷4482 BJWC2018 Border的四种求法
Problem 洛谷 Solution原创 2019-04-07 22:46:24 · 433 阅读 · 0 评论 -
UOJ395 NOI2018你的名字
Problem UOJ 给定一个S串,有m组询问,每次给定一个T串,询问T串有多少个本质不同的子串没有在S串的区间[L,R][L,R][L,R]中出现过。 Solution 看到涉及到子串的题我们就得把S串的SAM乖乖建好,看到本质不同,我们就还得把T串的SAM乖乖建好。 从统计本质不同子串的原理出发,我们只需要减去不合法的子串即可。一个比较显然的想法是,我们用T串去匹配[L,R][L,R][L,...原创 2019-01-13 19:07:50 · 412 阅读 · 0 评论 -
BZOJ4556 HEOI2016 字符串
Problem BZOJ Solution 我周围的聚聚一看就说这不是道SA的傻逼题吗…… 好吧,考虑用SAM怎么做。 先对反串建出SAM,[a,b]中的所有子串不好处理,因为在parent数上代表的链实在太多了,所以考虑从子串[c,d]开始下手 我们可以考虑二分lcp的长度,那么我们可以在O(logn)O(\log n)O(logn)的时间内找到这个子串所对应的节点,然后我们可以用主席树来查在...原创 2018-12-13 22:11:07 · 232 阅读 · 0 评论 -
BZOJ 2806 CTSC2012 熟悉的文章 cheat
Problem BZOJ Solution 注意到答案具有单调性,不妨考虑二分答案。设f[i]表示询问串前i位能匹配的最大长度,那么我们容易写出如下dp方程,其中pi表示的是当前串能匹配的最大长度: fi=maxj∈[i−pi,i−L](fi−1,fj+i−j)fi=maxj∈[i−pi,i−L](fi−1,fj+i−j)f_i=\max_{j\in[i-p_i,i-L]}(f_{i-1}...原创 2018-08-24 14:57:36 · 317 阅读 · 0 评论 -
Codeforces 700E Cool Slogans
Problem Codeforces Solution 先建出后缀自动机,然后我们可以按照right集合来dp。这个right集合可以用动态开点的线段树+线段树合并乱搞。然后dp部404 NOT FOUND 注意一下pos的转移,hhh我调这个调了40min Code #include <cstring> #include <cstdio> using ...原创 2018-06-26 17:36:31 · 489 阅读 · 0 评论 -
BZOJ 4199 NOI2015品酒大会
Problem BZOJ 题意:∀i∈[1,n−1]∀i∈[1,n−1]\forall_{i\in[1,n-1]},求最长公共前缀的长度为i的后缀有多少对,并求权值乘积最大为多少 Solution 这道题的前置题目应该是AHOI2013 差异 在parent树上,祖先表示了这个节点的后缀,那么两节点的lca,就是最长公共后缀。 那么考虑翻转原串,建出后缀自动机,拓扑排序之后再跑dp,注...原创 2018-06-30 14:17:07 · 230 阅读 · 0 评论 -
BZOJ 3998 TJOI2015弦论
Problem BZOJ Solution 建立后缀自动机,然后我们可以用类似二叉搜索树的思想。先排出拓扑序,然后将这个节点所代表的子串的个数处理出来,然后枚举第k小的是否在其中即可。 我们不妨令g[u]表示从节点u开始能代表的后缀个数,那么可以做一个拓扑动规。 我们容易得到方程: g[u]=sz[u]+∑u−>vg[v]g[u]=sz[u]+∑u−>vg[v]g[u]...原创 2018-05-03 22:14:28 · 352 阅读 · 0 评论 -
后缀自动机学习笔记及一句话题解
只做了一些水题,所以就先写个比较水的学习笔记(逃) 求有多少个本质不同的子串 结论题。。 ans=∑ilen[i]−len[f[i]]ans=∑ilen[i]−len[f[i]]ans=\sum_i len[i]-len[f[i]] 求拓扑序 对len进行桶排…… for(int i=1;i<=cnt;i++) c[l[i]]++; for(int i=1;i<=cnt;i...原创 2018-05-03 17:29:09 · 441 阅读 · 0 评论 -
LOJ6041 雅礼集训2017Day7 事情的相似度
Problem loj Solution 月底写来凑数的文章 两个前缀的最长后缀长度就是在SAM上的len[lca],那么问题就变成了求编号在 [L,R][L,R][L,R] 内的两个节点的最深lca 我们可以考虑离线,枚举 rrr 并维护各个 lll 的答案。从 r−1r-1r−1 转移到 rrr,就是要加入 rrr 点的贡献。我们可以暴力跳 rrr 的祖先,在每个节点上记录其子树内已加入的最大...原创 2019-04-30 16:57:12 · 399 阅读 · 0 评论