随笔分类 - 字符串----后缀自动机
摘要:Pro: https://codeforces.com/gym/102028/problem/H Sol: 用枚举不同子串后 问题转换为下面这个形式 组询问 每次询问包含三个参数,求下式 这个东西是个套路题 离线+
阅读全文
摘要:链接: https://codeforces.com/gym/102832/problem/G Pro: 给定一个 Sol: 很容易想到另一个题,叫歌唱王国。 然后按照那道题的套路推一发式子 发现对于任意一个字符串的 \[ \begin{align*} ans_S&=\sum_{i,i\ is\ a
阅读全文
摘要:Pro: https://www.luogu.com.cn/problem/CF1437G 给定一个大小为n的字符串集合,每个字符串有一个初始为0的权值 支持以下q次操作 1.把第个字符串的权值改为 2.给定一个字符串s,求出字符串集合中所有在s中出现过的字符串的权值的最大值 Sol:
阅读全文
摘要:别的都挺好理解的 难以理解的那个地方还是clone节点的问题 这里给一个非常好的例子 asabab 对这个字符串建立后缀自动机 会在最后一个字符的时候出现克隆节点的情况 仔细画一遍parent树应该就能理解了 克隆节点的意义实际上是为了把原本的一个节点拆为两个节点 为什么要拆呢 因为字符串末尾新增一
阅读全文
摘要:https://www.luogu.org/problemnew/show/P4384 容斥一下考虑计算切两刀使得三个串都不存在的s[l,r]的方案数。 分类讨论一下。 1.有三个互不相交的目标串 此时显然无解。 2.最左边的目标串和最右边的目标串相交 画一下图可以发现。 答案是一个sigema (
阅读全文
摘要:pro: 维护一个01字符串,支持在结尾动态加字符。 每一个长度 define N 22000 define L 20000 define eps 1e 7 define inf 1e9+7 define db double define ll long long define ldb long d
阅读全文
摘要:https://www.lydsy.com/JudgeOnline/problem.php?id=2555 想一下sam求子串出现次数的方法基本就能得到正解。 由于子串出现次数是一个子树和的形式。 动态插入字符串又要求动态维护树的结构,显然要用LCT。 注意一下LCT维护子树和的写法即可。 cpp
阅读全文
摘要:https://www.lydsy.com/JudgeOnline/problem.php?id=3413 显然答案等于模式串si和模板串的每一个后缀的匹配长度之和。 这里忽略了匹配成功的情况,那种情况只需要额外特判一些东西。 显然可以用线段树合并维护出right集合。 按照要求查询即可。 cpp
阅读全文
摘要:SAM真让人头秃。 题面 https://www.luogu.org/problemnew/show/P4770 首先考虑 l=1,r=∣S∣的做法 如果对于ION2018的子串不用判重的话,对ION2017建SAM跑一遍就好了. 此时ION2018的每一个前缀对答案的贡献为前缀长度 匹配长度。 考
阅读全文
摘要:首先有两个结论: 1.后缀自动机具有最简性,即每种不同的子串只会在sam上体现一次,体现形式是sam上一条由root出发的路径。 2.一个字符串不同子串的个数等于所有关键节点的max(x) min(x)+1。证明就是考虑后缀自动机的最简性。 然后,这就是个水题了。 每次插入一个字符后,更新答案即可。
阅读全文
摘要:题面 https://www.lydsy.com/JudgeOnline/problem.php?id=1396 首先,对于题目所说的T在S中只出现一次这个要求, 可以利用后缀自动机的parent树的叶子节点的性质来满足要求。 显然所有满足T在S中只出现过一次的子串就是parent树所有叶子节点的r
阅读全文