一、什么是后缀数组: 字符串后缀Suffix 指的是从字符串的某个位置开始到其末尾的字符串子串。后缀数组 Suffix Array(sa) 指的是将某个字符串的所有后缀按字典序排序之后得到的数组,不过数组中不直接保存所有的后缀子串,只要记录后缀的起始下标就好了。 比如下面在下面这张图中,sa[8] ...
分类:
编程语言 时间:
2019-01-26 11:03:08
阅读次数:
247
后缀数组(SA)总结 这个东西鸽了好久了,今天补一下 概念 后缀数组$SA$是设什么东西? 它是记录一个字符串每个后缀的字典序的数组 $sa[i]$:表示排名为$i$的后缀是哪一个。 $rnk[i]$:可以理解为$SA$数组的逆,记录后缀$i$的排名是多少,$rnk[SA[i]]=i$。 $lcp[ ...
分类:
编程语言 时间:
2019-01-21 20:06:14
阅读次数:
266
(〇)前置知识 1.排序 最好会 基数排序 ,实在不行可以快速排序 (倍增算法的时间复杂度会从$\Theta (n\log n)~\to~\Theta (n\log^2 n)$) 2.字符串 后缀 这个大家应该都知道,比方说有一个字符串$a~b~c~d~e~f$,那么它的后缀就是: 后缀1: $a~ ...
分类:
编程语言 时间:
2019-01-19 18:44:27
阅读次数:
207
核心:每一个后缀的每一个前缀都是一个子串 相邻后缀的lcp的值是就是重复子串的个数 用所有的子串减去sigma(height)就行了 ...
分类:
编程语言 时间:
2019-01-17 17:45:32
阅读次数:
211
#include #include #include #include #include using namespace std; const int maxn = 1e6+7; char str[maxn]; int sa[maxn],tp[maxn],rak[maxn],tax[maxn],a[... ...
分类:
编程语言 时间:
2019-01-17 17:43:17
阅读次数:
229
蒟蒻的第一道后缀数组的题目!! SA是个好东西,本题就是考察它的经典应用——求一个字符串里面两个后缀的最长公共前缀! 所以我们就可以考虑把两个字符串拼起来,然后查找两个后缀,使得他们的最长公共前缀最长。 然后就是板子了吧qwqwq(感觉SA的写法和网上很多人的不一样??不过原理还是一样的啦qwq) ...
分类:
其他好文 时间:
2019-01-07 22:34:29
阅读次数:
207
P2463 [SDOI2008]Sandy的卡片 直接二分长度暴力匹配....... 跑的还挺快 (正解是后缀数组的样子) 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 voi ...
分类:
其他好文 时间:
2019-01-06 14:32:59
阅读次数:
200
解法一:后缀数组 听说后缀数组解第k小本质不同的子串是一个经典问题。 把后缀排好序后第i个串的本质不同的串的贡献就是$n sa[i]+1 LCP(i,i 1)$然后我们累加这个贡献,看到哪一个串的时候,这个贡献的和大于等于k,然后答案就在这个串里了,然后枚举就行了。 那么第k小子串该怎么办? 我们考 ...
分类:
编程语言 时间:
2018-12-31 23:43:17
阅读次数:
257
后缀数组+ST表。 代填的坑。 $Code\ Below:$ ...
分类:
其他好文 时间:
2018-12-30 02:42:53
阅读次数:
259
题目描述 题解: 先要建一棵字典序最小的最短路树。 怎么建呢? 想起后缀数组,然后突然意识到可以按字典序依次搜索每一个点。 具体操作就是搜索时将可以转移到的点记录一下,然后按字典序排序,然后一个一个走。 这样最短路径树就建好了。 然后就是点分治+桶。 代码: ...
分类:
其他好文 时间:
2018-12-28 14:07:26
阅读次数:
248