![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
后缀数组
后缀数组
七九河开
这个作者很懒,什么都没留下…
展开
-
后缀数组模板
typedef long long ll; const int maxn = 200010; int cntA[maxn],cntB[maxn],sa[maxn],tsa[maxn],A[maxn],B[maxn],height[maxn]; int Rank[maxn]; ll n; char ch[maxn]; void solve() { for(int i = 0;i < ...原创 2019-02-16 10:07:11 · 148 阅读 · 0 评论 -
Musical Theme POJ - 1743 (后缀数组求不可重叠最长重复子串)
题目 https://cn.vjudge.net/problem/POJ-1743 题意 给定一个字符串,求最长重复子串,这两个子串不能重叠。 思路 这题比上一题稍复杂一点。先二分答案,把题目变成判定性问题:判断是否 存在两个长度为 k 的子串是相同的,且不重叠。解决这个问题的关键还是利用 height 数组。把排序后的后缀分成若干组,其中每组的后缀之间的 height 值都 不小于 k。例...原创 2019-02-17 09:58:49 · 195 阅读 · 0 评论 -
Milk Patterns POJ - 3261 (后缀数组求可重叠的最长重复子串)
题目 https://cn.vjudge.net/problem/POJ-3261 题意: 求可重叠的最长重复子串,但有一个限制条件。。要至少重复k次 思路 只需要求 height 数组 里的最大值即可。首先求最长重复子串,等价于求两个后缀的最长公共前缀的最 大值。因为任意两个后缀的最长公共前缀都是 height 数组里某一段的最小值, 那么这个值一定不大于 height 数组里的最大...原创 2019-02-17 10:03:04 · 219 阅读 · 0 评论 -
Power Strings POJ - 2406 (KMP求最小循环节)
题目 https://cn.vjudge.net/problem/POJ-2406 题意 用next数组求出整个数组的最大前缀,如果整个串是用循环节组成的,那么 n - next[n] 也就是最小循环节,验证最小循环节会被n整出。 思路 利用KMP算法,求字符串的特征向量next,若len可以被len - next[len]整除,则最大循环次数n为len/(len - next[len])...原创 2019-02-17 10:05:36 · 177 阅读 · 0 评论 -
Long Long Message POJ - 2774 (后缀数组求最长公共子串)
题目 https://cn.vjudge.net/problem/POJ-2774 题意 给你两串字符,要你找出在这两串字符中都出现过的最长子串 思路 先用个分隔符将两个字符串连接起来,再用后缀数组求出height数组的值,找出一个height值最大并且i与i-1的sa值分别在两串字符中就好了 #include<iostream> #include<cstring&g...原创 2019-02-17 10:11:17 · 237 阅读 · 0 评论