后缀数组构造方法: 1.倍增 直接参考刘汝佳蓝书 时间复杂度不优秀,但代码实现简单,细节处理较多,建议参考思路后背过代码。 #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<cstring ...
分类:
编程语言 时间:
2021-04-24 13:23:55
阅读次数:
0
参照博客 后缀数组 定义: 后缀就是从字符串的某个位置i到字符串末尾的子串,我们定义以s的第i个字符为第一个元素的后缀为$suff(i)$ 辅助数组: \(sa_i\):表示排名为$i$的后缀的起始位置的下标 \(rk_i\):表示起始位置的下标为$i$的后缀的排名 \(x_i\):表示起始位置的下 ...
分类:
编程语言 时间:
2021-02-18 12:56:53
阅读次数:
0
CF802I Fake News (hard) 这个题和 CF123D 很像,代码只有一点点不同。 首先看到子串的问题容易想到后缀数组,所以我们可以先对字符串求一遍后缀数组以及 height 数组。 接下来怎么做?哦们其实可以想得到单调栈。我们可以考虑对于 height 数组维护一个单调递增的栈。一 ...
分类:
编程语言 时间:
2021-02-17 14:52:34
阅读次数:
0
题目链接 题意:给定一个字符串,求重复次数最多的连续重复子串 题目思路:先穷举长度L,然后求长度为L的子串最多能连续出现几次。首先连续出现1次是肯定可以的,所以这里只考虑至少2次的情况。假设在原字符串中连续出现2次,记这个子字符串为S,那么S肯定包括了字符r[0], r[L], r[L2],r[L3 ...
分类:
编程语言 时间:
2020-11-12 14:07:06
阅读次数:
10
根据题意,寻找子串出现的第k次的开头。寻找第k大,一般可以想到用主席树来维护。 但是这题还需要更多的转化,首先想到我们如果想知道子串匹配,一个可以考虑kmp,但是因为询问过多,不太科学。 一般还有两种,一种是哈希算法,一种是后缀数组求lcp。考虑哈希算法,感觉可做性不是很大,因为他要多次匹配。考虑后 ...
分类:
编程语言 时间:
2020-09-18 02:17:50
阅读次数:
44
出大问题,我原来学了几天,然后刷了七八题吧,之后将近半年一次没用到, 今天回头一想后缀数组?????????? 所以来总结一下,省的模板题都不会了。 rk[i] 第i个后缀的排名; SA[i] 排名为i的后缀位置; Height[i] 排名为i的后缀与排名为(i-1)的后缀的LCP 1 POJ - ...
分类:
编程语言 时间:
2020-07-26 11:16:44
阅读次数:
72
题意:有N(1 ? N ? 20000)个音符的序列来表示一首乐曲,每个音符都是1...88范围内的整数,现在要找一个重复的子串,它需要满足如下条件:1.长度至少为5个音符。2.在乐曲中重复出现(就是出现过至少两次)。(可能经过转调,"转调"的意思是主题序列中每个音符都被加上或者减去了同一个整数值) ...
分类:
编程语言 时间:
2020-07-22 15:37:38
阅读次数:
73
这是一个作者历经千辛万苦,从无数次 \(WA\),\(RE\),\(TLE\) 中得到的心得体会与感悟。 这是一道后缀排序的进阶题,是一道很好的题目,作者认为它可以很好的加深我们对于后缀排序的理解。 首先,我们可以很容易的判断出来,这是一道后缀数组的题目,因为他要求我们找出在一棵基环树上,字典序最大 ...
分类:
其他好文 时间:
2020-07-17 22:30:57
阅读次数:
116
题意:找出文本串中字典序第 k 大的字符串 思路: 首先我们不能仅仅按后缀数组排完序后每个字符串的大小来找,因为重复字符也参与排名,比如 AAB 2, 结果是 A 而不是 AA。 注:以下第 i 个后缀均指排完序后第 i 小的后缀。 所以我们二分找第 k 大的字符串位于哪个区间,假定我们现在确定目标 ...
分类:
编程语言 时间:
2020-07-17 22:05:37
阅读次数:
71
介绍 后缀数组就是字符串的每个后缀的排序。 主要有两个sa和rk两个数组,sa[i]代表第i大的后缀的位置,rk[i]代表位置i的后缀的排位。满足rk[sa[i]] = sa[rk[i]] = i 实现 有很多求后缀数组的方法,其中一种是倍增法。 先给字符串每一位排序,然后倍增排序。假设当前倍增长度 ...
分类:
编程语言 时间:
2020-07-16 21:41:48
阅读次数:
61