后缀数组
lleozhang
这个作者很懒,什么都没留下…
展开
-
poj 1743
激动ing...我完成了1/8的男人...其实不难,但我交了3页WA,原因是我为防RE特判n=1直接输出,并没有读入!!!题意:给定一个长为n的序列,定义该序列的两个子序列(连续)相似,当且仅当这两个子序列长度相同且互不重叠,而且这两个子序列每个序列内部相邻元素前后做差,将所有差值排列成一个序列,这两个子序列得出的序列完全相同,现在想求这样的子序列最长的长度举个例子:序列1 2 5和4...原创 2018-09-26 16:17:59 · 128 阅读 · 0 评论 -
poj 3261
秒掉2/8的男人...这题也是考察的后缀数组基础应用:可重叠至少重复k次的最长子串显然还是对height数组应用于二分答案的检验二分一个长度,然后用height数组检验即可注意:不能单纯看height数组中出现某个值的次数,而是要关注height数组中连续出现某个值的次数,否则无法判断这个公共前缀是否相同代码:#include <cstdio>#includ...原创 2018-09-26 16:45:06 · 193 阅读 · 0 评论 -
spoj New Distinct Substrings
vjudge原地爆炸...题意:求一个字符串不同的子串的个数策略:后缀数组利用后缀数组的sa和height两个功能强大的数组,我们可以实现上述操作首先有个很显然的结论:一个字符串的所有子串=它后缀的所有前缀这是很显然的,因为一个后缀的前缀遍历了所有以该后缀起点为起点的字符串的子串,那么如果我们遍历所有后缀的,就能找出这个字符串的所有子串了所以对于一个起点为sa[i]的字符串...原创 2018-09-26 19:02:23 · 111 阅读 · 0 评论 -
后缀数组学习笔记
后缀数组是一个很迷的字符串算法...后缀数组的特点是:思想嘛...还行 代码嘛...很乱首先做一些基础介绍:后缀数组(sa)是一个数组(废话),他的作用是存储字典序排名为i的后缀的位置(即后缀的起点)而后缀数组常常与rank数组同步计算,其中rank数组是起点为i的后缀的排名既然如此,我们只要求出sa和rank其中之一,我们就可以求出另一个接下来,我们就来考虑一下怎么求...原创 2018-09-21 16:07:17 · 220 阅读 · 0 评论 -
poj 2774
题意:给出两个字符串,求这两个子串中最长相同子串长度策略:首先,我们可以将这两个字符串首尾相接,这样我们就可以获得一个长字符串,然后我们对这个新串求出height数组,然后枚举所有height并且找出两个sa,查出这两个sa是否在两个串内,这样就可以了如果是的话就用height更新ans即可还有一个细节要注意(虽然没写也能A,但总归是个hack点啊)状况如下:如图所示,下面...原创 2018-09-29 15:55:48 · 178 阅读 · 0 评论 -
bzoj 3238
后缀数组+单调栈的应用首先我们研究一下这个表达式,可以发现前半部分与串的情况并没有关系,而只是跟串的长度有关,所以我们先把前半部分算出来:于是我们只需计算出即可那么可以发现,对于排名分别为i,j的两个串,他们的lcp应当是:但是这里的时间复杂度仍然很大我们换一个角度来思考:如果设,那么我们认为height[k]产生了一个贡献所以我们可以从每一个height[k]产生了多...原创 2019-04-15 20:00:05 · 225 阅读 · 0 评论