![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
后缀数组
文章平均质量分 74
wxfwxf328
这个作者很懒,什么都没留下…
展开
-
poj2774 Long Long Message && hdu 1403 Longest Common Substring 最长公共字串【后缀数组(倍增)】
参考自2009年国家集训队论文《后缀数组——处理字符串的有力工具》(罗穗骞)将串a与串b连接后用后缀数组求最大height#include#includeusing namespace std;const int maxn=200000+10;int sa[maxn],rank[maxn],height[maxn],num[maxn];int wa[maxn],wb[max原创 2012-02-17 21:32:29 · 1373 阅读 · 1 评论 -
spoj 694&&705 后缀数组
每个子串一定是某个后缀的前缀,那么原问题等价于求所有后缀之间的不相同的前缀的个数。如果所有的后缀按照 suffix(sa[1]), suffix(sa[2]),suffix(sa[3]), …… ,suffix(sa[n])的顺序计算,不难发现,对于每一次新加进来的后缀 suffix(sa[k]),它将产生 n-sa[k]+1 个新的前缀。但是其中有height[k]个是和前面的字符串的前缀是相同原创 2012-03-22 10:34:01 · 750 阅读 · 0 评论 -
poj 3261 Milk Patterns 【后缀数组】
给定一个字符串,求至少出现 k 次的最长重复子串,这 k 个子串可以重叠。算法分析:这题的做法和上一题差不多,也是先二分答案,然后将后缀分成若干组。不同的是,这里要判断的是有没有一个组的后缀个数不小于 k。如果有,那么存在k 个相同的子串满足条件,否则不存在。这个做法的时间复杂度为 O(nlogn)#include#include#includeusing namespace原创 2012-03-22 10:38:21 · 721 阅读 · 0 评论 -
poj 1743 Musical Theme 【后缀数组】
有希望成为最长公共前缀不小于 k 的两个后缀一定在同一组。然后对于每组后缀,只须判断每个后缀的 sa 值的最大值和最小值之差是否不小于k。如果有一组满足,则说明存在,否则不存在。#include#include#includeusing namespace std;const int maxn=20100;int a[maxn],b[maxn],s[maxn],c[maxn];i原创 2012-03-22 10:40:39 · 505 阅读 · 0 评论 -
后缀数组——罗穗骞倍增算法详细注释
#includeconst int maxn=100010;int wa[maxn],wb[maxn],wv[maxn],ws[maxn];int cmp(int *r,int a,int b,int l){return r[a]==r[b]&&r[a+l]==r[b+l];} //就像论文所说,由于末尾填了0,所以如果r[a]==r[b](实际是y[a]==y[b]),说明待合并的两原创 2012-05-24 21:09:05 · 7308 阅读 · 0 评论