后缀数组
jinglinxiao
这个作者很懒,什么都没留下…
展开
-
POJ - 3415 - Common Substrings (后缀数组)
POJ - 3415 将两个串通过一个中间字符连接到一起,然后求出 heightheight 数组。 设两个串为 S,TS,T 。计数可以分为两部分: i∈S,j∈T且后缀字典序i>ji \in S,j \in T 且后缀字典序i>j 和 i∈S,j∈T且后缀字典序i<ji \in S,j \in T 且后缀字典序i<j 两部分。这样我们就可以在 heightheight 数组上使用单调栈计数了。原创 2017-09-16 23:04:26 · 203 阅读 · 0 评论 -
后缀数组
后缀数组 sa[i]sa[i] 是将一个字符串 ss 的所有后缀根据字典序排序后,排名为 ii 的后缀的第一个字母在 ss 中的位置。 求后缀数组有 O(nlogn)O(nlogn) 的倍增求法。根据字典序的性质,求字符串的字典序排名只要找到一个长度 kk ,使所有字符串变成长度为 kk 的字符串,大于 kk 的截取,小于 kk 的补0 。因此倍增 kk 直到所有字符串都不相等即可找到他们的字典序原创 2017-06-13 12:44:37 · 302 阅读 · 0 评论 -
HDU - 6194 - string string string (后缀数组)
HDU-6194求出 heightheight 数组,移动一个长度为 kk 的区间。ansans 更新的值应该为 min([i+1,i+k−1])−min([i+1,i+k])−min([i,i+k−1])+min([i,i+k])min([i+1,i+k-1])-min([i+1,i+k])-min([i,i+k-1])+min([i,i+k]) 。相当于出现 kk 次的串减去出现 k+1k+1原创 2017-09-17 00:21:38 · 204 阅读 · 0 评论 -
后缀数组题集
POJ - 3261可重叠出现至少 kk 次的最大子串。取height数组上长度为 k−1k-1 区间的最值就行了。#include<cstdio> #include<algorithm> using namespace std; const int N = 2e4+7,M=1e6+7; int sa[N],c[M],t1[N],t2[N],rk[N],h[N],dp[N][20],mm[N]; i原创 2017-10-18 22:23:05 · 294 阅读 · 0 评论