随笔分类 - 字符串——后缀自动机
摘要:http://hihocoder.com/problemset/problem/1465 求S的循环同构串在T中的出现次数 将串S变成SS 枚举SS的每个位置i,求出以i结尾的SS的子串 与 T的最长公共子串 若长度>=|S|,说明以i结尾的S的循环同构串在T中出现过 假设最后匹配i到达了后缀自动机
阅读全文
摘要:http://hihocoder.com/problemset/problem/1457 val[i] 表示状态i所表示的所有字符串的十进制之和 ans= ∑ val[i]在后缀自动机上,从起始状态走任意一条路径到达任意一个状态,这条路径上的字符就是到达的状态的字符串之一 所以利用拓扑排序,记录从起
阅读全文
摘要:http://hihocoder.com/problemset/problem/1445 求不同的子串个数
阅读全文
摘要:https://www.lydsy.com/JudgeOnline/problem.php?id=2865 同上一篇博客 就是卡卡空间,数组改成map #include<map> #include<cstdio> #include<cstring> #include<algorithm> #defi
阅读全文
摘要:https://www.lydsy.com/JudgeOnline/problem.php?id=1396 后缀自动机的parent树上,如果不是叶子节点,那么至少有两个子节点 而一个状态所代表子串的出现次数就是子树中叶子节点的个数 所以只有叶子节点 即 |Right|=1的状态 代表的子串 出现了
阅读全文
摘要:http://www.lydsy.com/JudgeOnline/problem.php?id=2555 后缀自动机,用LCT维护parent树 一个串的出现次数 = parent 树 上 其所在状态 的 子树 叶节点 | Right | 之和 若在parent中np的子节点中加一个节点p,设p的
阅读全文
摘要:http://www.spoj.com/problems/NSUBSTR/ 题意: F(x)定义为字符串S中所有长度为x的子串重复出现的最大次数 输出F[1]~F[len(S)] 用字符串S构建后缀自动机 若子串 str ∈状态s,那么子串str 在字符串S中出现的次数就是| Right(s) |
阅读全文
摘要:http://www.lydsy.com/JudgeOnline/problem.php?id=2882 将串S复制一遍变成SS 对SS构建后缀自动机,在上面走标号最小的边len(S)步,即可得最小循环串 因为后缀自动机可以识别串的所有后缀 而S的最小循环串一定是SS后缀的前缀
阅读全文
摘要:http://www.spoj.com/problems/LCS2/ 题意: 求10个串的LCS 1、用第一个串建立后缀自动机 2、len[s] 表示状态s 所能代表的字符串的最大长度 mx[s] 表示状态s 在 当前匹配的串的最长匹配后缀长度 ans[s] 表示状态s 在所有串的最长匹配后缀长度
阅读全文
摘要:http://www.spoj.com/problems/LCS/ 题意:求两个串的最长公共子串 用一个串建后缀自动机,另一个串在上面类似于fail树的方式跑 不匹配时到它的parent树上的父节点,相当于保留当前最长匹配后缀
阅读全文