"传送门" 也是广义 SAM 的板子题,建好广义 SAM,统计 $epA,epB,epC$,然后对于区间 $ans[len[fa[x]]+1],...,ans[len[x]]$ 加上 $epA\times epB\times epC$ 就行了,当然这个用差分实现简单快捷。 到这里,我后缀自动机的刷题 ...
分类:
其他好文 时间:
2020-04-10 09:12:31
阅读次数:
58
心路历程 $r l=r$的串若为A串且贡献为正即可加入,对于每一个B的位置预处理,时间复杂度$O(nlog_n+(r l)n+q)$ $r l 2000$后缀自动机+线段树合并,倍增找到点,跳endpos,跳的次数不会太多 SOL 数据有点特别啊~ $r l\in[51,2000]$和 2000做法 ...
分类:
其他好文 时间:
2020-04-01 13:15:21
阅读次数:
68
题意: 给出一个串 $S$,再给出 $n$ 个串 $T_i$, $q$ 次询问 $S[pl,pr]$ 在 $ T_{[l,r]}$哪个串出现次数最多。 solution: 不难想到我们找 $S[pl,pr]$ 是可以记录 $ed_{pr}$ 然后倍增上去找到这个区间所对应的 SAM 节点。 我们把 ...
分类:
其他好文 时间:
2020-03-23 00:03:32
阅读次数:
68
bzoj3473 简单的想法就是把这些串的广义$\mathrm{SAM}$建出来,然后对每个节点求出它代表的串出现在了多少个原串中。假设这个已经求出,接下来我们对每个节点求出它及其祖先节点的贡献(因为它们对应了最长串的一连串后缀),在求每个串的答案时在$\mathrm{SAM}$匹配就好了。 那么怎 ...
分类:
其他好文 时间:
2020-03-20 00:55:30
阅读次数:
76
记录一下这几天刷的后缀自动机的题目 "Glass Beads UVA 719" 求 $S$ 循环同构的最小表示 将 $S$ copy 成 $SS$ 后建出后缀自动机,按字典序走 $n$ 步即可 代码 "Longest Common Substring SPOJ LCS" 求两个串的最长公共子串 对第 ...
分类:
其他好文 时间:
2020-03-17 19:45:45
阅读次数:
76
题意: 对于一个给定长度为N的字符串,求它的第K小子串是什么。N<=5000000,K<=1000000000。 题解: 对于本题,首先我们要做的事情是先建立后缀自动机。 如果T=0,那么每一个位置的出现次数直接设为1,T=1否则就是正常的right集合大小。 那么我们可以再记一个sum[i],表示 ...
分类:
其他好文 时间:
2020-02-13 13:13:09
阅读次数:
67
核心思想: 通过巧妙的设计使得我们能用一个DAG和树的复合结构来在线性复杂度内存储一个串的$n^2$个子串的信息。 定义: 1.后缀自动机的结构类似于AC自动机,每个点表示一个endpos等价类(子串结束位置的集合,以下简称为状态),边同AC自动机中的边。即后缀自动机上从根到一个点有若干条路径,这些 ...
分类:
其他好文 时间:
2020-02-10 22:47:35
阅读次数:
84
第一次写这个题是好长时间以前了,然后没调出来. 本来以为是思路错了,结果今天看题解发现思路没错,但是好多代码细节需要注意. code: #include <cstdio> #include <vector> #include <map> #include <cstring> #include <al ...
分类:
其他好文 时间:
2020-02-09 16:50:44
阅读次数:
83
P3804 【模板】后缀自动机 (SAM) #include<bits/stdc++.h> using namespace std; const int N=2e6+100; typedef long long ll; char s[N]; int ch[N*2][26],len[N*2],fa[N ...
分类:
其他好文 时间:
2020-02-07 20:56:24
阅读次数:
65