后缀数组
Master.Yi
学习他人,提升自己;
提升自己,帮助他人。
展开
-
模拟赛20200208【概率生成函数,NTT优化DP,同构(本质匹配)后缀数组】
T1:题解:考试的时候相当转化为多项式,然后就不会了。。题解:求无穷项的多项式是可以由递推关系解的!用分式多项式表示就行了!std维护了多项式,但是由于最后只需要F1(z)=zF′(z),F2(z2)=z4F′′(z2)+z2F′(z2)F_1(z)=zF'(z),F_2(z^2)=z^4F''(z^2)+z^2F'(z^2)F1(z)=zF′(z),F2(z2)=z4F...原创 2020-02-10 23:55:18 · 265 阅读 · 0 评论 -
省选模拟赛20200129 T1 (分割字符串使最大字典序子串最小)【二分,贪心,后缀数组】
题目描述:长度为nnn的字符串sss,至多可以分成mmm段,使所有段的所有子串中字典序最大的子串字典序最小,输出这个串。n≤105,m≤15n\le10^5,m\le15n≤105,m≤15题目分析:事实告诉我们最大值最小真的可以二分。。先求出后缀数组,得到本质不同的子串个数。然后二分答案,每次先通过后缀数组求出第mid小的子串,然后贪心进行检验。检验的时候,从后往前贪心,每次加入一...原创 2020-01-29 22:30:39 · 338 阅读 · 0 评论 -
POJ3294 Life Forms【后缀数组(不小于 k 个字符串中的最长子串)】
题目描述:给出k个字符串,k<=100,每个字符串长度<=1000.求最长的子串使得它出现在>k/2个字符串中,如果有多个最长,按字典序输出。题目分析:将 k 个字符串连起来,中间用不相同的且没有出现在字符串中的字符隔开,求后缀数组。然后二分答案,将后缀分成若干组,判断每组的后缀是否出现在大于 k/2 个的原串中。因为答案子串长度都是一样的所以可以用后缀数组确定字典序,...原创 2020-01-18 09:33:17 · 176 阅读 · 0 评论 -
POJ3415 Common Substrings【后缀数组(长度不小于 k 的公共子串的个数)】
题目描述:RT,给定两个字符串 A 和 B,求长度不小于 k 的公共子串的个数(可以相同)。样例 :A=“xx”,B=“xx”,k=1,长度不小于 k 的公共子串的个数是 5。题目分析:基本思路是计算 A 的所有后缀和 B 的所有后缀之间的最长公共前缀的长度,把最长公共前缀长度不小于 k 的部分全部加起来。先将两个字符串连起来,中间用一个没有出现过的字符隔开。按 height 值分组后,...原创 2020-01-17 22:38:38 · 162 阅读 · 0 评论 -
POJ2774 Long Long Message【后缀数组(最长公共子串)】
题目描述:RT,n<=100000,小写字母,求两个串的最长公共子串。题目分析:两个串拼起来,答案就是两个在不同串中的后缀的最长公共前缀。我傻了。。写了后缀数组还去写二分分组。。实际上只需要取height对应的两个后缀在不同串中的最大值就可以了。Code:#include<cstdio>#include<cstring>#include<alg...原创 2020-01-17 21:38:30 · 222 阅读 · 0 评论 -
POJ3693 Maximum repetition substring【后缀数组(重复次数最多的连续重复子串)】
题目描述:如果一个串能被最多分成R个相同的连续串,则R称为S的重复次数。给出串S,求S的子串中重复次数最多的串,如果有相同输出字典序最小的。|S|<=100000,小写字母。题目分析:论文题。但是要字典序最小就比较难受。。。比较两个答案的字典序的时候本来是要求最长公共前缀的,但是这个题可以直接用rank比较,因为两个都是重复次数相同的重复子串,如果长度一样,那么显然可以用ran...原创 2020-01-17 20:54:14 · 168 阅读 · 0 评论 -
POJ1743 Musical Theme【后缀数组】
题目描述:长度为n(<=20000)的整数序列(数值范围1到88),求长度大于等于5且最长的两个不重叠子串,使得其中一个整体加上或减去一个数后与另一个完全相同。输出长度。题目分析:设原串为a[i]a[i]a[i],令b[i]=a[i+1]−a[i]b[i]=a[i+1]-a[i]b[i]=a[i+1]−a[i],b[l]b[l]b[l]到b[r]b[r]b[r]对应于原串的a[l]a[...原创 2020-01-17 17:18:46 · 143 阅读 · 0 评论 -
后缀数组论文阅读笔记
以下内容引自2009国家集训队论文《后缀数组——处理字符串的有力工具》 罗穗骞最长公共前缀:height数组的区间最小值。单个字符串的相关问题可重叠最长重复子串:子串就是后缀的一个前缀,所以重复子串就是两个后缀的公共前缀,只需求两个后缀的最大公共前缀,就是height数组的最大值。不可重叠最长重复子串:二分答案kkk,把问题变成判定性问题:判断是否存在两个长度为 k 的子串...原创 2020-01-17 15:54:44 · 288 阅读 · 0 评论 -
BZOJ 3238: [Ahoi2013]差异【后缀数组+单调栈】
题面:题目分析:前面的∑lenTi+lenTj=n∗(n+1)/2∗(n−1)\sum lenTi+lenTj = n*(n+1)/2 * (n-1)∑lenTi+lenTj=n∗(n+1)/2∗(n−1)考虑后面怎么求。(对网上的后缀树做法略表懵逼。。虽然懂原理但是理解并不深刻。 )只需要把后缀数组中的height值拿来乱搞。两个排名分别为i,j的后缀,它们的LCP就是height[...原创 2019-04-01 19:45:37 · 161 阅读 · 1 评论 -
BZOJ 2946: [Poi2000]公共串【后缀自动机/后缀数组】
题面:给出几个由小写字母构成的单词,求它们最长的公共子串的长度。文件的第一行是整数 n,1<=n<=5,表示单词的数量。接下来n行每行一个单词,只由小写字母组成,单词的长度至少为1,最大为2000。题目分析:后缀数组做法:将 n 个字符串连起来,中间用不相同的且没有出现在字符串中的字符隔开,求后缀数组。然后二分答案,按照height值将后缀分成若干组,判断每组的后缀是否包...原创 2019-04-01 16:58:17 · 215 阅读 · 0 评论 -
BZOJ 2119: 股市的预测 【枚举长度找关键点+后缀数组求LCP】
题意:给一个长度为N的A数组,一个时间间隔M,要你把A数组的每个元素与前一个作差得到一个长度为N-1的B数组。在B数组中找形如aba的子串的个数,其中b的长度为M。N,M<=50000题目分析:在b的长度一定的情况下,怎么找形如aba的串?枚举a的长度,设为len,把序列分成这样的几段:那么a串一定包含上面画的关键点中的某一个。只需要枚举这些点,假设枚举到点i,那么只需要看i与...原创 2019-04-01 08:33:56 · 168 阅读 · 0 评论 -
BZOJ 4278: [ONTAK2015]Tasowanie 【后缀数组 / 二分哈希求LCP】
题面:给定两个数字串A和B,通过将A和B进行二路归并得到一个新的数字串T,请找到字典序最小的T。第一行包含一个正整数n(1<=n<=200000),表示A串的长度。第二行包含n个正整数,其中第i个数表示Ai。第三行包含一个正整数m(1<=m<=200000),表示B串的长度。第四行包含m个正整数,其中第i个数表示Bi。Sample Input61 2 3 1...原创 2019-03-31 12:07:44 · 225 阅读 · 0 评论