随笔分类 - 字符串-后缀数组
摘要:Description 求一个字符串内重复次数最多的连续字串。 Solution "丢一个hihocoder的链接" 先考虑如何如何求一个串给定的串的最大重复次数,枚举一个可能的循环节长度 $l$,然后求原串和原串去掉前 $l$ 个字符后两个串的 $lcp$(最长公共前缀),如果能完全匹配上,就是一
阅读全文
摘要:Description $Sandy$ 和 $Sue$ 的热衷于收集干脆面中的卡片。 然而,$Sue$ 收集卡片是因为卡片上漂亮的人物形象,而 $Sandy$ 则是为了积攒卡片兑换超炫的人物模型。 每一张卡片都由一些数字进行标记,第 $i$ 张卡片的序列长度为 $M_i$,要想兑换人物模型,首先必须
阅读全文
摘要:Update 2018.1.8: sto lsy orz 给出了一个 $O(n)$ 的做法。 Description 求若干个串的最长的公共子串的长度。 Solution 考虑将这若干个串全部拼起来,中间用一些不在字符集内的符号隔开。 然后二分答案 $K$,如果连续的一段 $height$ 都大于等
阅读全文
摘要:Description 求字符串的最长不可重叠重复子串。 Solution 如果有两个子串相同,那么也就是有两个后缀的 $lcp$ 相同。 所以考虑二分答案 $K$,如果有连续一段的 $height$ 都不小于 $K$,那么这一段区间内,两两后缀的 $lcp$ 都不小于 $K$,那么记录一下区间的
阅读全文
摘要:Description 求字符串 $s$ 的最长可重叠重复 $k$ 次子串。 Solution 重复出现了 $k$ 次,相当于我们选择了 $k$ 个后缀,求他们的 $lcp$。 显然 $k$ 个后缀的 $rank$ 是连续的,所以重复出现 $k$ 次的前缀就是 $min(height[l+1\dot
阅读全文
摘要:Description 求两个字符串的最长公共子串。 Solution 把两个字符串拼起来,问题就转化为了求任意两个后缀的 $lcp$ 的最大长度。 显然这个最大长度是 $height_i$ 的值,$\text{SA}$ 求解即可。 需要注意的是,对于 $height_i$ 需要判断一下 $SA_i
阅读全文
摘要:Update 2020.1.7 看了 "oiwiki" 忽然发现自己的模板代码是那样的丑陋,常数是那样的大,重新打了一遍。之前交的题都变快了,开心! 定义 $S$:需要处理的字符串,长度为 $len$ $suf_i$:字符串$S$中下标为 $i \sim len$ 的连续子串(即后缀) $rank_
阅读全文