后缀数组
文章平均质量分 87
cillyb
这个作者很懒,什么都没留下…
展开
-
第七届福建省赛 FZU 2267 The Bigger the Better(贪心 后缀数组)
题意:给你两个数组,让你将这两个数组合并成一个数组,每个数组的内部顺序不能改变,让你求合并能得到字典序最大的数组。(n思路:正常的贪心的思路是用两个指针从两个开头开始比较,谁大谁先放,但是问题在于碰到两个相等的时候谁先放,思路是往后找第一个不相等的,谁的大谁先,但是这样会n^2复杂度。我们可以利用后缀数组将两个数组合并(中间位置要放0,比如 1 1 X 1 1 2比较后应该原创 2017-07-20 19:16:32 · 998 阅读 · 0 评论 -
2017沈阳网络赛 1001 HDU 6194 string string string(后缀自动机 出现k次的子串个数)
题意:给你一个字符串,和一个k,问你字符串中恰好出现k次的子串有多少种。思路:HDU4641的简化版,HDU4641求的是>=k次的子串个数,所以现在我们只需跑两次计算出>=k次的和>=k+1次的,两者相减即位恰好出现k次的子串个数。具体思路参考HDU4641的就行:点击打开链接代码:#includeusing namespace std;typedef原创 2017-09-10 20:55:33 · 1569 阅读 · 0 评论 -
HDU 5442 Favorite Donut (最大表示法+KMP || 后缀数组)
题意:给你一个字符串,起点任意选,让你顺时针或逆时针取完得到的字符串字典序最大,如果有多种取法,优先选择起点下标小的。思路:顺时针很简单,求一下最大表示法就行;逆向的话字符串倒着存求一遍最大表示得到的是下标最大的,而题目要求是下标最小的,所以我们可以将逆串*2拼起来,然后拿求出的最大表示做下KMP标记匹配的位置,这样可以知道每个可以最大表示的位置,这样就能找到下标最小的那个了。原创 2017-09-21 23:29:23 · 447 阅读 · 0 评论 -
HDU 5763 Another Meaning (DP+KMP||后缀数组)
题意:给你两个字符串,A,B,A中每一个B字符串都有两种意思,问A总共可以有多少种意思。|A|,|B| 思路:可以想到dp[i]表示长度为i的A串的含有的方案数,那么可以得到转移方程dp[i] = dp[i-1], 如果i字符与前面的lenB-1个字符能构成B串, 那么再加上dp[i-lenB].关键是怎么判断A串第i个字符结尾是否跟B串匹配,既然字符串匹配,那就可以用原创 2017-09-04 23:08:53 · 407 阅读 · 0 评论 -
HDU 5769 Substring (后缀数组)
题意:给你一个字符c和一个字符串s,问你s的所有不同子串中有多少个子串含有c。思路:做过求不同子串个数打开链接,是∑n-sa[i]-height[i], 现在要求子串中含有c,无非是每次计算从含有c的前缀开始计算。预处理记录下每个位置向后最近的c的位置。这样答案就是∑n-max(p[sa[i]], sa[i]+height[i])代码:#include#i原创 2017-07-19 12:47:53 · 436 阅读 · 0 评论 -
POJ 3693 Maximum repetition substring(重复次数最多的连续子串 字典序最小)
题意:给你一个字符串(len思路:求重复最多好计算,直接题目有做到(点击打开链接)但是要输出一个字典序最小的一开始没弄明白。首先存起来最多次数可能的长度,然后枚举sa数组,取到的第一组,肯定是字典序最小的。但是怎么算取到? 就是LCP(sa[i]+1, sa[i]+1+len) >= (ans-1)*a[j],即这一段重复达到了最多次。代码:#inclu原创 2017-07-18 18:11:03 · 516 阅读 · 0 评论 -
POJ 2406 Power Strings(KMP or 后缀数组 dc3板子)
题意:给出一个字符串 问它最多由多少相同的字串组成 思路:有简单的KMP解法点击打开链接也可以拿KMP做,n枚举长度i,如果长度i的子串刚好是重复了len/i次,要满足len % i == 0和rank[0] - rank[i] == 1 和height[rank[0]] == len-i(sa[0]与sa[i]的lcp为len-i)。字符串abab:ababa原创 2017-07-18 15:21:16 · 415 阅读 · 0 评论 -
SPOJ SUBST1 New Distinct Substrings(不同的子串个数)
题意:给你一个长度为n的字符串,问你有几个不同的子串.如 ABABA: len=1 : A,Blen=2 : AB,BAlen=3 : ABA,BABlen=4 : ABAB,BABAlen=5 : ABABA共9个。思路:所有的子串都是后缀的前缀,即所有子串的数目就是所有后缀的长度和。(跟枚举子串起点终点一样)、总个数减去重复的即为答案,计算重复的可以原创 2017-07-18 13:19:07 · 640 阅读 · 0 评论 -
hihoCoder 1407 后缀数组二·重复旋律2 && POJ 1743 Musical Theme(最长不可重叠重复子串问题)
hihoCoder 1407:描述小Hi平时的一大兴趣爱好就是演奏钢琴。我们知道一个音乐旋律被表示为长度为 N 的数构成的数列。小Hi在练习过很多曲子以后发现很多作品自身包含一样的旋律。旋律可以表示为一段连续的数列,相似的旋律在原数列不可重叠,比如在1 2 3 2 3 2 1 中 2 3 2 出现了一次,2 3 出现了两次,小Hi想知道一段旋律中出现次数至少为两次的旋律原创 2017-07-17 20:07:10 · 586 阅读 · 0 评论 -
hihoCoder 1403 后缀数组一·重复旋律(最长可重叠重复子串问题)
描述小Hi平时的一大兴趣爱好就是演奏钢琴。我们知道一个音乐旋律被表示为长度为 N 的数构成的数列。小Hi在练习过很多曲子以后发现很多作品自身包含一样的旋律。旋律是一段连续的数列,相似的旋律在原数列可重叠。比如在1 2 3 2 3 2 1 中 2 3 2 出现了两次。小Hi想知道一段旋律中出现次数至少为K次的旋律最长是多少?解题方法提示输入第一行两个整数 N和K。1≤N≤原创 2017-07-17 19:17:52 · 749 阅读 · 0 评论 -
hihoCoder 1419 后缀数组四·重复旋律4(重复次数最多的连续子串)
描述小Hi平时的一大兴趣爱好就是演奏钢琴。我们知道一个音乐旋律被表示为长度为 N 的数构成的数列。小Hi在练习过很多曲子以后发现很多作品中的旋律有重复的部分。我们把一段旋律称为(k,l)-重复的,如果它满足由一个长度为l的字符串重复了k次组成。 如旋律abaabaabaaba是(4,3)重复的,因为它由aba重复4次组成。小Hi想知道一部作品中k最大的(k,l)-重复旋律。解题方法原创 2017-07-18 00:20:44 · 613 阅读 · 0 评论 -
hihoCoder 1415 后缀数组三·重复旋律3(最长公共子串)
描述小Hi平时的一大兴趣爱好就是演奏钢琴。我们知道一个音乐旋律被表示为长度为 N 的数构成的数列。小Hi在练习过很多曲子以后发现很多作品中的旋律有共同的部分。旋律是一段连续的数列,如果同一段旋律在作品A和作品B中同时出现过,这段旋律就是A和B共同的部分,比如在abab 在 bababab 和 cabacababc 中都出现过。小Hi想知道两部作品的共同旋律最长是多少?解题方法提示原创 2017-07-17 20:47:33 · 501 阅读 · 0 评论 -
后缀数组详解
转自:点击打开链接为什么学后缀数组后缀数组是一个比较强大的处理字符串的算法,是有关字符串的基础算法,所以必须掌握。 学会后缀自动机(SAM)就不用学后缀数组(SA)了?不,虽然SAM看起来更为强大和全面,但是有些SAM解决不了的问题能被SA解决,只掌握SAM是远远不够的。 ……有什么SAM做不了的例子? 比如果求一个串后缀的lcp方面的应用,这是SA可以转载 2017-07-17 16:29:07 · 762 阅读 · 0 评论 -
最小表示法/最大表示法 O(n)
循环字符串的最小表示法的问题可以这样描述:对于一个字符串S,求S的循环的同构字符串S’中字典序最小的一个。由于语言能力有限,还是用实际例子来解释比较容易:设S=bcad,且S’是S的循环同构的串。S’可以是bcad或者cadb,adbc,dbca。而且最小表示的S’是adbc。对于字符串循环同构的最小表示法,其问题实质是求S串的一个位置,从这个位置开始循环输出S,得到的S’转载 2017-09-21 23:24:19 · 3958 阅读 · 0 评论