随笔分类 - 后缀自动机
摘要:题意: 对于给出的字符串S, 长度不超过1000, 求其中本质不同的子串的数量, 这些子串满足在字符串S中出现了至少不重合的2次 题解: 将串放入后缀自动机中然后求出每一个节点对应的子串为后缀的子串出现的最早和最晚的位置 然后根据 1 #include <set> 2 #include <map>
阅读全文
摘要:题意: 给定一个长度不超过 10W 的只包含小写字母的字符串,从下标 0 到 n−1。从下标 0 开始操作, 每次对于下标 pos查找下标 pos 开始的子串中最长的在其他地方出现过的长度,其他出现的位置要求起点在位置 pos 之前,然后 pos 移动到这个长度之后继续操作;如果没有这样的最长串儿就
阅读全文
摘要:题意: 给出 n 个串,求出这 n 个串所有子串代表的数字的和。 题解; 首先可以把这些串构建后缀自动机(sam.last=1就好了), 因为后缀自动机上从 root走到的任意节点都是一个子串,所有可以利用这个性质来做 我们发现对于dp[u]−>dp[v]过程,如果之前走到 dp[u] 的有 12,
阅读全文
摘要:题意: 给出两个字符串a,b,求一个字符串,这个字符串是a和b的子串, 且只在a,b中出现一次,要求输出这个字符串的最小长度。 题解: 将a串放入后缀自动机中,然后记录一下每个节点对应的子串出现的次数 然后把b串取自动机中匹配 然后判断一下 1 #include <set> 2 #include <
阅读全文
摘要:题目: 给定一个字符串a,又给定一系列b字符串,求字符串a的子串不在b中出现的个数。 题解: 先将所有的查询串放入后缀自动机(每次将sam.last=1)(算出所有子串个数) 然后将母串放入后缀自动机然后记录这个子串个数 两个值相减即可 1 #include <set> 2 #include <ma
阅读全文
摘要:题意: 给出一个字符串,给出一些子串,问每个子串分别在母串中圆环匹配的次数, 圆环匹配的意思是将该子串拆成两段再首位交换相接的串和母串匹配,比 如aaab变成baaa,abaa,aaba再进行匹配。 题解: 如何求出所有的循环串出现的次数呢? 先将S串放入后缀自动机 把查询串扩大一倍,然后在后缀自动
阅读全文
摘要:题意: 求字典序第K大的子串 题解: 先求出后缀自动机对应节点 1 #include <set> 2 #include <map> 3 #include <stack> 4 #include <queue> 5 #include <cmath> 6 #include <ctime> 7 #inclu
阅读全文
摘要:题意: 长度为x的本质不同的串的出现次数 题解: 先处理出每一个节点所对应的子串出现的次数 然后取max就好了 1 #include <set> 2 #include <map> 3 #include <stack> 4 #include <queue> 5 #include <cmath> 6 #
阅读全文
摘要:题意: 求多个串的最长公共子串 这里用的是O(n)的后缀自动机写法 我后缀数组的专题有nlog(n)写法的 题解: 对于其中的一个串建立后缀自动机 然后对于后缀自动机上面的每一个节点求出每一个节点最长可以匹配的子串(用maxx【】数组存下) 但是在后缀自动机上面有些节点没有走过,但是是某些走过的点的
阅读全文

浙公网安备 33010602011771号