SA 后缀数组】的更多相关文章

SA 后缀数组 首先一定要确定\(SA\)是个什么东西 \(SA[i]\)表示的是排名为\(i\)的后缀是哪一个 至于后缀\(i\)的排名是多少,那个是\(rank[i]\) 当然啦 最最最难懂的就是基数排序 要是不用基数排序,每次对于一个二元组直接\(sort\)一下 这样的复杂度是\(O(nlog^2)\) 对于二元组的基数排序应该是这样做的: 首先把所有元素按照最后一维丢到依次对应的桶里面 然后顺次取出 再按照第一维依次丢入 再顺次取出 这样就可以排序啦 先把代码丢出来 bool cmp(…
The repetition number of a string is defined as the maximum number \(R\) such that the string can be partitioned into \(R\) same consecutive substrings. For example, the repetition number of "ababab" is 3 and "ababa" is 1. Given a stri…
Given a string, we need to find the total number of its distinct substrings. Input \(T-\) number of test cases. \(T<=20\); Each test case consists of one string, whose length is \(<=1000\) Output For each test case output one number saying the numbe…
基本上一搜后缀数组网上的模板都是<后缀数组——处理字符串的有力工具>这一篇的注释,O(nlogn)的复杂度确实很强大,但对于初次接触(比如窝)的人来说理解起来也着实有些困难(比如窝就活活好了两天的光阴..),看了那么多材料感觉<挑战程序设计>的后缀数组解释理解起来会相对容易很多,然而它的复杂度是O(nlog2n)的,主要区别是对子串排序的时候前者用了计数排序--O(n),而后者用了快排--O(nlogn),这就导致了最终的复杂度后者比前者多了一个O(logn). O(nlog2n)…
自己看着大牛的论文学了一下后缀数组,看了好久好久,想了好久好久才懂了一点点皮毛TAT 然后就去刷传说中的后缀数组神题,poj3693是进化版的,需要那个相同情况下字典序最小,搞这个搞了超久的说. 先简单说一下后缀数组.首先有几个重要的数组: ·SA数组(后缀数组):保存所有后缀排序后从小到大的序列.[即SA[i]=j表示排名第i的后缀编号为j]        ·rank数组(名次数组):记录后缀的名次.[即rank[i]=j表示编号为i的后缀排名第j] 用倍增算法可以在O(nlogn)时间内得出…
Long Long Message Time Limit: 4000MS   Memory Limit: 131072K Total Submissions: 30427   Accepted: 12337 Case Time Limit: 1000MS Description The little cat is majoring in physics in the capital of Byterland. A piece of sad news comes to him these days…
后缀数组的一些基本概念请自行百度,简单来说后缀数组就是一个字符串所有后缀大小排序后的一个集合,然后我们根据后缀数组的一些性质就可以实现各种需求. public class MySuffixArrayTest { public char[] suffix;//原始字符串 public int n;//字符串长度 public int[] rank;// Suffix[i]在所有后缀中的排名 public int[] sa;// 满足Suffix[SA[1]] < Suffix[SA[2]] --…
bzoj3796Mushroom追妹纸 题目描述 Mushroom最近看上了一个漂亮妹纸.他选择一种非常经典的手段来表达自己的心意——写情书.考虑到自己的表达能力,Mushroom决定不手写情书.他从网上找到了两篇极佳的情书,打算选择其中共同的部分.另外,Mushroom还有个一个情敌Ertanis,此人也写了封情书给妹子. Mushroom不希望自己的情书中完整的出现了情敌的情书.(这样抄袭的事情就暴露了). Mushroom把两封情书分别用字符串s1和s2来表示,Ertanis的情书用字符串…
参考资料这次是真抄的: 1.后缀数组详解 2.后缀数组-学习笔记 3.后缀数组--处理字符串的有力工具 定义 \(SA\)排名为\(i\)的后缀的位置 \(rk\)位置为\(i\)的后缀的排名 \(tp\)第二关键字的排名为\(i\)的后缀的位置,还被用作\(rank\)的暂存 \(tax\)每个排名对应的后缀数量 后缀数组就是为了求出\(sa\)和\(rk\) 性质 \(rk[sa[i]]=i\) \(sa[rk[i]]=i\) $LCP(x,y) $:字符串x与字符串y的最长公共前缀,在这里…
后缀数组(SA)总结 这个东西鸽了好久了,今天补一下 概念 后缀数组\(SA\)是什么东西? 它是记录一个字符串每个后缀的字典序的数组 \(sa[i]\):表示排名为\(i\)的后缀是哪一个. \(rnk[i]\):可以理解为\(SA\)数组的逆,记录后缀\(i\)的排名是多少,\(rnk[SA[i]]=i\). \(lcp[i]\):别人一般叫\(height\),表示后缀\(SA[i]\)与\(SA[i-1]\)的最长公共前缀的长度. 后缀排序 求出后缀数组的算法,模板题 代码 先上代码,便…