![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
【字符串】SAM/后缀自动机
SAM/后缀自动机
A_zjzj
衢州华茂外国语学校郑钧
展开
-
CF700E Cool Slogans / YbtOJ「字符串算法」第3章 后缀自动机 G. 重复子串 题解--zhengjun
选出一个字符串序列 sss,使得对于每一个 sis_isi,都是原串的子串,且每个 sis_isi 在 si−1s_{i-1}si−1 中都出现过至少两次,求最大的序列长度。发现其实可以做到让所有选出的字符串都是上一个字符串的后缀,因为如果后面留了一个尾巴,那么前面的字符串把这个尾巴砍了是不影响答案的。然后发现,其实这个就是 SAM 在 parent 树上的顺序(在 parent 树上,儿子一定是父亲的后缀),那么,只需要从上往下 dpdpdp,记录上一个选择的后缀为 fafafa,当前在 uuu,那原创 2022-05-31 20:45:59 · 179 阅读 · 0 评论 -
YbtOJ 「字符串算法」第3章 后缀自动机 C. 【问题3】K小子串 题解--zhengjun
思路对于 T=0T=0T=0 的情况,直接建出后缀自动机,统计一下一个点为开始的字串有多少个,然后从上往下找就可以了。对于 T=1T=1T=1 的情况,同样建出后缀自动机,统计一下每个字符串的出现次数,和刚刚一样做就好了。细节不多。代码#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e6+10;int n,m,tag,ch[N][26],lnk[N],len[N],las,cn原创 2022-05-19 22:24:31 · 248 阅读 · 0 评论