先上模板 int len[maxn << 1],fa[maxn << 1],son[maxn << 1][maxc]; LL num[maxn << 1]; int size,last; void Init(){ size = last = 1; } void insert(char c){ int ...
分类:
其他好文 时间:
2019-09-10 23:31:25
阅读次数:
106
题意:给定一个字符串,q次询问,每次询问给定一个数k,查询原串的所有不同子串中字典序第k小的子串在原串中的开始和结束位置,若有多个答案则输出最小的开始位置,不存在输出0 0 后缀自动机经典问题,所以我用后缀数组 预处理sum数组记录不同字符串的个数,即sum[i] = len - sa[i] + 1 ...
分类:
编程语言 时间:
2019-09-09 22:35:04
阅读次数:
108
题意: 给一个字符串S,令F(x)表示S的所有长度为x的子串中,出现次数的最大值。 求F(1)..F(Length(S)) Length(S) <= 250000 思路:板子中st[x]定义为root到x的最多步数,可以用来更新所有长度为[1..st[x]]的答案 ...
分类:
其他好文 时间:
2019-09-04 18:53:45
阅读次数:
76
题意 给出一个字符串,每次询问其一个子串$[S_l,S_r]$在原串中第$k$次出现所在的位置(开头位置) 解法 题意很简洁,思路也很简洁 就是代码巨难打 总之这道题还是让我很大程度上加深了对于$SAM$的认识啦,还去学了一下线段树合并 首先,根据后缀自动机的性质我们能知道题目所要求的的实际上是 $ ...
分类:
其他好文 时间:
2019-09-02 23:49:13
阅读次数:
102
题意 给定一个长度为n字符串,字符集大小为m(1 using namespace std; typedef long long ll; const int maxn=1e6+5; const int mod=1e9+7; struct Suffix_Automaton{ struct state{ ...
分类:
其他好文 时间:
2019-09-02 10:03:22
阅读次数:
65
"ProblemSet" 签到题就不写了。 C. Distinct Substrings 等我学了后缀自动机再来写吧,咕咕咕。 D. Modulo Nine 设 $dp[i][j][k]$ 表示填了前 $i$ 个位置,最近的一个含3这个因子的数在 $k$,次近的在 $j$的方案数。 那么对每个点求出 ...
分类:
其他好文 时间:
2019-09-01 22:15:32
阅读次数:
143
"传送门" 题意: 给出$p,q$,现在要你生成一个字符串$s$。 你可以进行两种操作:一种是花费$p$的代价随意在后面添加一个字符,另一种是花费$q$的代价可以随意赋值前面的一个子串。 现在问最小代价是多少。 思路: 考虑$dp$,那么就有转移方程:$dp[i]=min\{dp[i 1]+p,dp ...
分类:
其他好文 时间:
2019-08-31 15:35:50
阅读次数:
175
"传送门" 题意: 对给定字符串$s$,求其第$k$小子串,重复串被计入以及不被计入这两种情况都需考虑。 思路: 首先构建后缀自动机,之后就考虑在后缀自动机上$dp$。 我们知道如果要考虑重复串,那么就会与一个结点的$endpos$集合的大小有关,对于一条边$(u,v)$,如果结点$u$的$endp ...
分类:
其他好文 时间:
2019-08-31 15:17:26
阅读次数:
87
"传送门" 1445 : 后缀自动机二·重复旋律5 题意: 给出字符串$s$,询问字符串$s$中有多少不同的子串。 思路: 考虑对$s$建后缀自动机,那么$\sum (len[i] len[fa[i]])$即为答案。 还可以考虑$dp$,设$dp[i]$为从$i$出发不同子串的个数,那么$dp[i] ...
分类:
其他好文 时间:
2019-08-30 20:49:09
阅读次数:
61
[HEOI2012]旅行问题 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2746 题解: 这个是讲课时候的题。 讲课的时候都在想怎么后缀自动机.... 当然是能做啦,$SAM$这么强。 实际上是个$AC$自动机,按照题目模拟就行了。 ...
分类:
其他好文 时间:
2019-08-27 23:04:10
阅读次数:
110