摘要: 题意:给出一个字符串 $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 阅读(174) 评论(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 阅读(106) 评论(0) 推荐(0) 编辑
摘要: 题意:给定 $S$ ,多组询问,每次 $a,b,c,d$ 四个参数,问你子串 $S[a..b]$ 的所有子串和 $S[c..d]$ 的最长公共前缀的长度的最大值是多少。 $SAM$ + 线段树合并 + 二分答案 二分答案 $md$ 找到 $s[c+md 1]$ 在 $SAM$ 上对应的状态并倍增跳到 阅读全文
posted @ 2020-01-10 18:25 LuitaryiJack 阅读(163) 评论(0) 推荐(0) 编辑
摘要: $SAM$ + 分类讨论 先建出 $SAM$ 然后求出 $|{\rm endpos}(p)|$ $ \sum w=kq\leq 10^5$,于是对 $k$ 的大小分类讨论。 $k\geq\sqrt n$ , $q\leq\sqrt n$ ,直接在 $SAM$ 匹配 $w$ ,求出每个位置在 $SAM 阅读全文
posted @ 2020-01-10 18:23 LuitaryiJack 阅读(103) 评论(0) 推荐(0) 编辑
摘要: $SAM$ + $LCT$ 维护 $parent树$ 每次插入一个点对应修改 $LCT$ 并链加,相当于在链上的 $\rm endpos$ 中添加一个新的位置。 匹配就在 $SAM$ 上跑即可。 2020.01.10 阅读全文
posted @ 2020-01-10 18:21 LuitaryiJack 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 广义 $SAM$ + 二分答案 + 单调队列优化 $DP$ 对作文库建广义 $SAM$ ,然后求出作文每个位置的最长匹配 $d[i]$,然后二分答案 $md$,然后 $DP$ ,$f[i]$ 表示到 $i$ 的最大匹配长度,有 $f[i]=\max(f[j] j+i),j\in[i d[i],i m 阅读全文
posted @ 2020-01-10 17:53 LuitaryiJack 阅读(82) 评论(0) 推荐(0) 编辑
摘要: $SAM $ + 线段树合并 先对 $S$ 建 $SAM$ ;然后对于每一个串询问串 $T$ ,首先在 $S$ 的 $SAM$ 上跑出 $T$ 的每个位置的最长匹配长度 $f[i]$ ,即 $T[i f[i]+1,i]$ 是与 $S$ 中的某个子串是匹配的 且 $f[i]$ 是最大的 。 然后我们再 阅读全文
posted @ 2020-01-10 17:52 LuitaryiJack 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 广义 $SAM$ 由于叶子节点比较少,直接暴力枚举叶子,把所有串插入广义 $SAM$ 即可。 2020.01.10 阅读全文
posted @ 2020-01-10 17:51 LuitaryiJack 阅读(74) 评论(0) 推荐(0) 编辑
摘要: 题意:多个串的最长公共子串。 $SAM$ 把第一个串插进去,之后的每个串都在上面跑。 对于每一个串记录在每个点的最长匹配 $mx[]$ 数组;跑完后更新父亲的答案,并且每个点与已有答案取 $\rm min$ 。 2020.01.10 阅读全文
posted @ 2020-01-10 17:50 LuitaryiJack 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 本质不同的第 $k$ 小:每个点的初始权值为 $1$ 。 只区分位置的第 $k$ 小:每个点的初始权值为 $|{\rm endpos}|$ ,表示出现的次数。 然后进行拓扑排序。 2020.01.09 阅读全文
posted @ 2020-01-10 17:49 LuitaryiJack 阅读(82) 评论(0) 推荐(0) 编辑
摘要: 题意:给定 $n$ 个字符串 $S_{1\cdots n}$ ,求所有不同的子串的“和”(也就是把串看成数字,在十进制下的求和,允许有前导0)。答案有可能很大,我们需要对 $10^9 + 7$ 取模。 $SAM$ 把所有串用间隔字符拼起来,建出 $SAM$ ,然后在上面 bfs ,求出每个点的答案。 阅读全文
posted @ 2020-01-10 17:47 LuitaryiJack 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 题意:求 $f(i),i\in[1,n]$ ,$f(i)$ 表示长度为 $i$ 的子串中,出现的最大次数。 $SAM$ 通过 $parent 树$ 子树和求出 $|{\rm endpos}(p)|$ ,然后 $ans[{\rm len}(p)]={\rm max}(ans[{\rm len}(p)] 阅读全文
posted @ 2020-01-10 17:46 LuitaryiJack 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个字符串,求本质不同排名第k小的子串。 $SAM$ 建好 $SAM$ 后,拓扑排序求出每个点向下的子串数,然后在 $trie$ 树上贪心(类似线段树二分)。 2020.01.09 阅读全文
posted @ 2020-01-10 17:45 LuitaryiJack 阅读(89) 评论(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 阅读(105) 评论(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 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 题意:求 $T$ 与 $S$ 的每个后缀的最长公共前缀。 先令 $s=S+T$ ,$z[i]$ 表示 $T$ 与 $suff_i$ 的最长公共前缀。 (注意下标是从 $0$ 开始的) $z[i]=min(z[i l],r i+1)$ ,前一部分如图: 后一部分是要保证不能越过最靠右的边界,因为更靠右 阅读全文
posted @ 2020-01-10 17:41 LuitaryiJack 阅读(99) 评论(0) 推荐(0) 编辑
摘要: 题解:二分+莫队 "感谢hl666大佬" 我们搞出后缀数组然后对于每一个询问串二分出在后缀数组上对应的询问区间。 然后我们的问题变成了区间颜色数,即不同种类的后缀数,开个桶即可。 如何考虑对每只猫的贡献?比如总询问数为 $cnt$ ,有一只猫待在桶里的时间为 $[i,j)$ 。我们可以先假设猫能在桶 阅读全文
posted @ 2020-01-10 17:40 LuitaryiJack 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 题意:求出现次数 $\geq K$ 的最长子串的长度。 $SA$ 中所有 $i\in [l,l+K 2],ht[i]$ 的最小值。单调队列。 $SAM$ 建出来后,跑一边子树和即为出现次数顺便记下答案。 2020.01.09 阅读全文
posted @ 2020-01-10 17:39 LuitaryiJack 阅读(102) 评论(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 阅读(80) 评论(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 阅读(106) 评论(0) 推荐(0) 编辑