随笔分类 -  字符串_SA

摘要:题意:给出一个字符串 $S$ ,给出 $Q$ 个操作,给出$L$ , $R$ , $T$ ,求字典序最小的$S_1$,使得$S_1$为$S[L..R]$的子串,且$S_1$的字典序严格大于$T$。输出这个$S_1$,如果无解输出$ 1$。 $SAM$ + 线段树合并 利用在 $parent树$ 线段 阅读全文
posted @ 2020-01-10 18:33 LuitaryiJack 阅读(185) 评论(0) 推荐(0)
摘要:题意:给定一个主串 $S$ 和 $n$ 个询问串,求每个询问串的所有循环同构在主串中出现的次数总和。 我们把 $S$ 建出 $SAM$ ,对每个询问串我们令 $T'=T[1\cdots n]+T[1\cdots n 1]$ ,我们让 $T'$ 在 $S$ 的 $SAM$ 上跑匹配即可。注意每个点要打 阅读全文
posted @ 2020-01-10 18:30 LuitaryiJack 阅读(118) 评论(0) 推荐(0)
摘要:题意:求本质不同的子串数。 "$SA$" $SAM+DP$ 答案即为路径条数。 我们设 $f[u]$ 表示从 $u$ 出发的路径条数:$f[u]=1+\sum_{(u,v,ch)} f[v]$ ,其中 $1$ 代表空串。 最后答案即为 $f[0] 1$ $SAM+parent树$ 每个子串只会出现一 阅读全文
posted @ 2020-01-10 17:43 LuitaryiJack 阅读(113) 评论(0) 推荐(0)
摘要:$SA$ 总数 重复出现的次数。 $\frac{n\times (n+1)}{2} \sum_{i=1}^n ht[i] $ "$SAM$" 2019.01.09 阅读全文
posted @ 2020-01-10 17:42 LuitaryiJack 阅读(109) 评论(0) 推荐(0)
摘要:题解:二分+莫队 "感谢hl666大佬" 我们搞出后缀数组然后对于每一个询问串二分出在后缀数组上对应的询问区间。 然后我们的问题变成了区间颜色数,即不同种类的后缀数,开个桶即可。 如何考虑对每只猫的贡献?比如总询问数为 $cnt$ ,有一只猫待在桶里的时间为 $[i,j)$ 。我们可以先假设猫能在桶 阅读全文
posted @ 2020-01-10 17:40 LuitaryiJack 阅读(126) 评论(0) 推荐(0)
摘要:题意:求出现次数 $\geq K$ 的最长子串的长度。 $SA$ 中所有 $i\in [l,l+K 2],ht[i]$ 的最小值。单调队列。 $SAM$ 建出来后,跑一边子树和即为出现次数顺便记下答案。 2020.01.09 阅读全文
posted @ 2020-01-10 17:39 LuitaryiJack 阅读(121) 评论(0) 推荐(0)
摘要:题意:求 $\sum_{1\leq i include include define R register int define ll long long using namespace std; namespace Luitaryi { inline int g() { R x=0,f=1; re 阅读全文
posted @ 2020-01-10 17:38 LuitaryiJack 阅读(88) 评论(0) 推荐(0)
摘要:题意:两个字符串取出相同子串的方案数,方案不同当且仅当这两个子串中有一个位置不同。 $SA$ 后缀的前缀是子串,即求 $\sum_{i include include define R register int define ll long long using namespace std; nam 阅读全文
posted @ 2020-01-10 17:37 LuitaryiJack 阅读(115) 评论(0) 推荐(0)
摘要:题意:求差分串的最长公共子串。 $SA$ 二分答案 $k$ ,即求是否存在一段连续的 $ht[]$ ,且其中包括了所有串的后缀。 $SAM$ 板子? 2020.01.09 阅读全文
posted @ 2020-01-10 17:36 LuitaryiJack 阅读(118) 评论(0) 推荐(0)
摘要:题意:对于每个 $k$ ,求 $S[p,p+k 1]==S[q,q+k 1],(p,q)为无序二元组$ 的方案数,并求出在 $k$ 一定时,$vl[p]\times vl[q]$ 的最大值。 $SA$ 并查集:我们把 $ht[]$ 当做边,合并时计算两个集合产生的贡献; 好像还可以单调栈+ST表做吧 阅读全文
posted @ 2020-01-10 17:35 LuitaryiJack 阅读(142) 评论(0) 推荐(0)
摘要:题意:给出一个字符串 $S$ ,将 $S$ 所有的循环同构串按字典序排序,按顺序输出排序后每个串的首字符。 $SA$ 把串复制一倍拼在后面,然后进行后缀排序即可。 $SAM$ ...没必要吧。 2020.01.09 阅读全文
posted @ 2020-01-10 17:32 LuitaryiJack 阅读(125) 评论(0) 推荐(0)