后缀数组+二分 1. 从后往前贪心扫 当必须分的时候就分一段 注意比较两个串大小时的细节 2. 先二分这个串第一次出现时在后缀数组上的位置 再二分具体是哪个串 从前往后扫,使右端点不断往左缩,当 右<=左 时分一段 快的飞起 1. 2. ...
分类:
其他好文 时间:
2017-04-20 10:18:11
阅读次数:
112
题目链接:uva 12206 - Stammering Aliens 题目大意:给出一个字符串,找出至少出现m次的最长子串。 解题思路:哈希算法,将每一个后缀数组建立一个哈希值。每次二分长度推断,每次推断时将哈希值排序,计数就可以。 #include <cstdio> #include <cstri ...
分类:
其他好文 时间:
2017-04-18 17:02:21
阅读次数:
233
题意: 思路:显然len(t[i])+len(t[j])这部分的和是一定的 那么问题就在于如何快速求出两两之间lcp之和 考虑将它们排名后用SA可以很方便的求出lcp,且对答案没有影响,因为形式都是数对 所以用SA求出height 每个位置的height作为lcp的区间为扩展到最左最右,直到heig ...
分类:
编程语言 时间:
2017-04-17 09:49:11
阅读次数:
265
题意:问a串中有多少种字符串集合B中没有的连续子串。a的长度10^5,B中的总长度为不超过10^5. 解法:后缀数组题目;后缀数组能够非常easy算出来一个串中有多少种子串。把a和B集合连起来。求一次不同子串数量,然后减掉B相互连起来的数量。在求时候,要减掉含有链接符的子串,方法是扫一遍,枚举最后出 ...
分类:
编程语言 时间:
2017-04-14 22:29:24
阅读次数:
188
题意:给定一个字符串,求一个最长的回回文子串,多解输出第一个。 析:把字符串翻转然后放到后面去,中间用另一个字符隔开,然后枚举每一个回文串的的位置,对第 i 个位置,那么对应着第二个串的最长公共前缀, 求最长公共子串,可以用RMQ解决。 代码如下: ...
分类:
编程语言 时间:
2017-04-13 20:03:54
阅读次数:
237
前面放了几天假(虽然我们是在补课),所以懒得写博客。补课期间学习了网络流,后面写专题总结。网络流主要是建模,慢慢搞。 后缀数组这个东西非常难搞,当初老师讲的时候 我(lao)们(shi) 水了2h,讲完还是一脸懵逼。虽然思路是理解了,但是完全不知道代码是什么意思。cnm 然后某一天晚上我没交手机,坐 ...
分类:
编程语言 时间:
2017-04-06 00:08:37
阅读次数:
236
【算法】后缀数组 【题解】后缀数组 由于m太大,先离散化。 然后处理SA和LCP。 最后用单调队列处理即可。 注意实际上队列头尾长度限制是K-1. 删队尾不要删过头 i≥K才能开始统计答案。 #include<cstdio> #include<algorithm> #include<cstring> ...
分类:
其他好文 时间:
2017-04-03 16:55:48
阅读次数:
171
描述 我们定义一个字符串的后缀suffix(i)表示从s[i]到s[length(s)]这段子串。后缀数组(Suffix array)SA[i]中存放着一个排列,满足suffix(sa[i])<suffix(sa[i+1]) 按照字典序方式比较定义height[i]表示suffix(sa[i])与s ...
分类:
编程语言 时间:
2017-04-01 21:08:25
阅读次数:
197
Description 求形如ABA形式的字符串,其中B长度固定,\(n\leqslant 10^5\) Solution 后缀数组。 我们可以枚举一个长度\(x\),然后将序列分组,每组长度为\(x\),然后从\(i\)找和\(i+x+B\)的最长公共后缀和最长公共前缀,然后得到一组合法区间,限制 ...
分类:
其他好文 时间:
2017-03-31 09:20:14
阅读次数:
165
重复次数最多的字串,我们可以枚举循环节的长度。 然后正反两次LCP,然后发现如果长度%L有剩余的情况时,答案是在一个区间内的。 所以需要找到区间内最小的rk值。 两个后缀数组,四个ST表,$\Theta(n\log n)$ 就可以解决了 空间卡死了,瞎晶胞卡过去了。 ...
分类:
编程语言 时间:
2017-03-30 18:41:49
阅读次数:
170