[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4566 [算法] 首先 , 子串是后缀的前缀 考虑拼接两个字符串 , 中间用不可见字符隔开 , 求出该字符串的后缀数组 那么前缀相同的后缀一定排名一定接近 而我们又知道lcp(i , j ...
分类:
其他好文 时间:
2019-02-10 21:51:38
阅读次数:
177
题目大意: 定义一个字符串的拆分是优秀的当且仅当是$AABB$的形式,求给定字符串的所有子串的所有的拆分中有多少是优秀的。 思路: 95分太好拿了,这里直接考虑正解该怎么做。 不难发现我们只需要求出每个点开头的$AA$形式的字符串和每个点结尾的$AA$字符串,然后枚举分割点两边乘起来就好了。可是关键 ...
分类:
编程语言 时间:
2019-02-07 16:16:37
阅读次数:
222
题目大意: 给定一个序列,定义两个后缀是k相似的当且仅当这两个后缀有长度为k的公共前缀。 求对任意$r\in [0,n 1]$,$r$相似的后缀的对数和两个后缀乘积的最大值。 思路: 先考虑后缀数组是如何计算两个后缀的lcp,发现是对于一段连续的height取min。 于是对于制定的相似度r,hei ...
分类:
编程语言 时间:
2019-02-06 19:48:08
阅读次数:
207
题目大意: 给定一个文本串和一个模式串,求文本串中有多少个连续的子串和模式串相差不超过三个字符。 思路: 算是一道后缀数组的模板题。 直接做lcp,然后遇到匹配不上的就跳,跳的次数不能超过三次。 具体地,将两个字符串连在一起,中间加一个分隔符,然后求出height,用rmq维护height数组的区间 ...
分类:
编程语言 时间:
2019-02-06 12:04:32
阅读次数:
241
(〇)题目描述 "题目传送门" 简单讲解一下题意: 给出一个字符串,求最长至少出现了 $k$ 的子串(可重叠)。 (一)解题思路 这题需要我们在一个模式串中找相同的子串,很容易就能想到后缀数组。 那么,如何找至少重复出现 $k$ 次的子串呢? 考虑 二分子串的长度 ,看看答案是否具有单调性。 如果长 ...
分类:
其他好文 时间:
2019-02-03 18:11:59
阅读次数:
184
用SA求出height数组,然后发现每个height值都有一个贡献区间(因为点对之间要依次取min) 用单调栈处理出区间,第一问就做完了 然后用并查集维护每个点的贡献(?),从大到小枚举height,因为这样区间是不断增大的所以并查集合并即可 cpp include include include ...
分类:
编程语言 时间:
2019-02-01 23:52:08
阅读次数:
301
layout: post title: 「kuangbin带你飞」专题十八 后缀数组 author: "luowentaoaa" catalog: true tags: kuangbin 字符串 后缀数组 传送门 倍增法 cpp // include include include using na ...
分类:
编程语言 时间:
2019-01-29 01:16:41
阅读次数:
195
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2119 就是找差分序列上中间差 m 的相等的两段。 考虑枚举这样一段的长度 L 。可以把序列分成 \( \frac{n}{L} \) 段;令 L , 2L , ... 这样的位置为关键点,那么每 ...
分类:
编程语言 时间:
2019-01-28 14:03:09
阅读次数:
167
题目:求最长重复子串长度(可重复或者可交叉),例如 str = "abcbcbcbc",则最长重复子串为 "bcbcbc",最长重复子串长度为6。 思路:这道题用暴力解法的话不太现实,就算能实现效率也比较低。那这里用到的就是后缀数组+高度数组就能解决问题,这里有个规律:任何的子串都是某一个后缀数组的 ...
分类:
其他好文 时间:
2019-01-27 21:58:43
阅读次数:
227
这题要求两个串中的最长相同子串的长度。高度数组可以求一个串中的最长相同子串的长度。所以想到把两个串连起来,但是这样又会产生一些新的串(第一个串的结尾和第二个串的开头组成的)于是在两个串中间放一个'\0'分隔,正好'\0'是字符里最小的,不会对第一个串的排序产生影响。 ...
分类:
编程语言 时间:
2019-01-27 16:39:03
阅读次数:
187