后缀自动机
文章平均质量分 88
FSYo
我不去想是否能够成功,
既然选择了远方,
便只顾风雨兼程
展开
-
「HAOI2018」字串覆盖 (SAM)(Hash)(倍增)
LOJLOJLOJ传送门挺好的题,就是提示得有些明显,很显然对 r−l≥2000r-l\ge 2000r−l≥2000,r−l≤50r-l\le 50r−l≤50 有两种不同的做法一个比较容易发现的贪心是我们选尽量前面的匹配,匹配过后再寻找下一个位置那么就有一个做法是对第一个串建 SAMSAMSAM 倍增找到第二个串的结点,线段树合并 endposendposendpos,在 endpos...原创 2020-02-12 14:57:22 · 309 阅读 · 0 评论 -
「九省联考 2018」制胡窜 (SAM)(线段树合并)(分类讨论)
LOJLOJLOJ 传送门题解:好题啊,除的写起来伤心情……首先转换一下题意,找到这个串的所有出现位置,这个可以用 SAMSAMSAM 加倍增实现,然后砍两刀使得每一个出现位置都被砍断,下面我们对这两刀怎么砍分类讨论:一些规定: 令每个串的出现位置为 li,ril_i,r_ili,ri,出现的次数为 mmm,令 LLL 为 r1r_1r1,RRR 为 lml_mlm,一个点的(不严...原创 2020-02-07 22:47:16 · 367 阅读 · 2 评论 -
【BJWC2018】Border 的四种求法(SAM)(线段树合并)(链分治)(DSU on Tree)
传送门题意:给一个字符串,求区间 borderborderborder题解:对于一个串 S[l...r]S[l...r]S[l...r],求的就是 max{i∈[l,r)∣lcs(i,r)≥i−l+1}max\{i\in[l,r)|lcs(i,r)\ge i-l+1\}max{i∈[l,r)∣lcs(i,r)≥i−l+1}这启示我们从 rrr 开始跳 failfailfail 树,到一个点...原创 2020-01-26 12:39:00 · 432 阅读 · 0 评论 -
【51nod1600】Simple KMP(SAM)(LCT)(差分)
题意:对于一个字符串 ∣S∣|S|∣S∣,我们定义 fail[i]fail[i]fail[i],表示最大的 x 使得 S[1..x]=S[i−x+1..i]S[1..x]=S[i-x+1..i]S[1..x]=S[i−x+1..i],满足 (x<i)(x<i)(x<i)显然对于一个字符串,如果我们将每个 0<=i<=∣S∣0<=i<=|S|0<=...原创 2020-01-17 20:31:58 · 238 阅读 · 0 评论 -
暑假集训 ---- 字符串2 (SAM专题)
[AHOI2013]差异两个串的最长公共后缀就是后缀自动机上 lca 的长度于是把两个串反过来,对于每一个结点统计有多少对结点以它为 lca,size 乘一下就可以了[TJOI2015]弦论对于后缀自动机的 DAG,求出 sum[i]sum[i]sum[i] 表示 i 往后走能走多少个字符串如果不同位置算不同,那么令 sizisiz_isizi 为 endposendposendpos...原创 2019-10-08 16:29:30 · 211 阅读 · 0 评论 -
P3181 [HAOI2016]找相同字符 [SAM]
传送门对第一个串建一个SAM, 拿第二个上去跑考虑跑到一个点的贡献, 就是(当前匹配的长度 nowlen - right 集合的最短长度 minlen) * right 集合的大小因为跟每个长度在这之间的串都可以匹配 siz 次然后跳 link, 对于它上方的点的贡献, 就是 (maxlen - minlen + 1) * siz所以我们记录每个点被考虑的次数, 最后向前统计一...原创 2019-07-16 12:53:27 · 176 阅读 · 0 评论 -
BZOJ1396 识别子串 [SAM+线段树]
传送门显然只有后缀自动机上 right 集合为 1 的才能作为答案我们先建出 SAM, 考虑一个 right 集合为1 的点的贡献它在原串的对应点为 pos, 它的长为 Minlen -- Maxlen于是用线段树维护最小就可以了#include<bits/stdc++.h>#define N 400050using namespace std;str...原创 2019-07-16 12:53:41 · 180 阅读 · 0 评论 -
[NOI2015]品酒大会 [SAM]
传送门其实没有想象中难, 我们知道, 两个串的最长公共后缀就是 parent 树上的LCA 的len对于出现次数, 枚举每一个 LCA, 然后 siz 乘一下因为如果 len 出现了, len - 1 也出现了, 所以求一个后缀和对于最大值, 我们维护子树最大与次大, 因为有负数, 所以还要维护次小与最小同样对最大值也求一个后缀最大#include<bits/std...原创 2019-07-15 16:29:43 · 266 阅读 · 0 评论 -
P4770 [NOI2018]你的名字 [SAM+主席树]
传送门渐渐发现, 自己曾经认为的不可做题, 被一道一道地做了尽管机房盛行装菜, 但无论是我, 还是机房的伙伴, 都在一天一天地变强A了这道题, 可能也只有感动, 激动, 自豪能形容我的心情解题思路 :先考虑暴力我最原始的暴力 ----把 l -- r 之间的拿出来建SAM, 然后询问串的每一个后缀那上去跑, 终止位置记为 pos那么 i -- pos 这些都是出...原创 2019-07-15 09:55:12 · 219 阅读 · 2 评论 -
后缀自动机 [取巨神博客之精华]
大部分内容来源于https://www.luogu.org/blog/Kesdiael3/hou-zhui-zi-dong-ji-yang-xie1. 后缀自动机可以在一个DAG上表示所有子串2. 在trie树中插入每个后缀就是后缀自动机的暴力版本对于aabab建trie,红色为根,黄色为终止节点 3. endpos 的定义4. 一些性质1.如果两个子串的...原创 2019-02-03 11:22:23 · 188 阅读 · 0 评论