[TOC] 后缀自动机做题记录 来填之前的坑了。。。考后大概会做做有字符串的综合题吧 "sp1811" lcs板子,对于第一个串建出SAM,第二个串在上面跑,即可求出对于每一个位置的后缀的最大匹配长度 "sp1812" n串lcs板子,对于每个节点去min即可,但是要注意到当前答案对parent子树 ...
分类:
其他好文 时间:
2019-10-10 19:54:21
阅读次数:
99
问题解决 一般用于解决一类最小表示或最小串的问题。 问题引入 例题: "poj1509" 求它的循环串中字典序最小的串的开头。 问题解决 暴力 找到所有的串存下来然后排序,复杂度$\Theta(n^2)$的。 诡异做法 建个后缀自动机然后遍历最小的字母边即可。 正经一点的 考虑两个指针$i$,$j$ ...
分类:
其他好文 时间:
2019-10-05 22:34:06
阅读次数:
110
题意 给定一个只包含小写字母的字符串 S , 请你求出 S 的所有出现次数不为 1 的子串的出现次数乘上该子串长度的最大值。 "传送门" 思路 后缀自动机,parent树上dfs。 code ...
分类:
其他好文 时间:
2019-10-03 13:08:45
阅读次数:
90
题意: 对于一个给定的长度为n的字符串,求出它的第k小子串。 有参数t,t为0则表示不同位置的相同子串算作一个,t为1则表示不同位置的相同子串算作多个。 题解: 首先,因为t的原因,后缀数组较难实现,这里不讨论。 使用后缀自动机: 因为,这里需要按字典序考虑子串,所以要使用trs指针。 首先,计算出 ...
分类:
其他好文 时间:
2019-10-01 22:28:05
阅读次数:
115
这题解法很多,简单说几个: 1. 线段树合并,时间复杂度是 $O(nlog^2n)$ 的. 2. 暴力跳 $fail,$ 时间复杂度 $O(n\sqrt n),$ 比较暴力. 3. 建立后缀树后在 $dfs$ 序上数点,时间复杂度为 $O(nlogn),$ 十分优秀. Code: ...
分类:
编程语言 时间:
2019-09-24 12:21:37
阅读次数:
96
题意: 给出两个字符串a,b,求一个字符串,这个字符串是a和b的子串, 且只在a,b中出现一次,要求输出这个字符串的最小长度。 题解: 将a串放入后缀自动机中,然后记录一下每个节点对应的子串出现的次数 然后把b串取自动机中匹配 然后判断一下 1 #include <set> 2 #include < ...
分类:
其他好文 时间:
2019-09-22 12:50:24
阅读次数:
93
题目: 给定一个字符串a,又给定一系列b字符串,求字符串a的子串不在b中出现的个数。 题解: 先将所有的查询串放入后缀自动机(每次将sam.last=1)(算出所有子串个数) 然后将母串放入后缀自动机然后记录这个子串个数 两个值相减即可 1 #include <set> 2 #include <ma ...
分类:
其他好文 时间:
2019-09-21 12:48:52
阅读次数:
78
K = 1..length(S)求出所有长度为K的子串中出现次数最多的子串的出现次数 | endpos(st) |就是st这个状态包含的子串在S中出现的次数 在parent tree上自底向上累加| endpos |,考虑特殊情况:当前状态包含S的前缀,则额外+1,最后统计答案即可 C++ incl ...
分类:
其他好文 时间:
2019-09-20 17:10:04
阅读次数:
91
题意:给你一个长度为n的字符串和m组询问,每组询问给出l,r,k,求s[l,r]的第k次出现的左端点。 解法一: 求出后缀数组,按照排名建主席树,对于每组询问二分或倍增找出主席树上所对应的的左右端点,求第k大的下标即可。 解法二: 建立后缀自动机,对后缀树(fail树)作线段树合并可得到每个结点包含 ...
分类:
编程语言 时间:
2019-09-12 23:37:36
阅读次数:
144
【前置知识】 AC自动机(没有什么关联,但是看懂了会对后缀自动机有不同的理解) 【解决问题】 各种子串的问题 【算法学习】 学习后缀自动机的过程中,看到了许多相关性质和证明,但是奈何才疏学浅(lan) 暂时先放着,到有空再更 【算法分析】 后缀自动机和AC自动机和回文自动机的不同点在于 后缀自动机是 ...
分类:
编程语言 时间:
2019-09-11 21:47:47
阅读次数:
113