
字符串---后缀数组
呜喵汪
这个作者很懒,什么都没留下…
展开
-
HDU - 1403 Longest Common Substring :(后缀数组之两串中的最大重复子串)
近来重新学习后缀数组,顺便熟悉kuangbin大佬的模板,发现后缀数组的用法真的多,开始慢慢记录= = 题目大意:题意很简单,直接求两个串中的共有的最长重复子串。 解题思路:首先看一个串的最长重复子串,其实就是height数组的最大值。但是这个题目有个限制条件,要求这个串必须出现在两个串中,那么我们直接以sa数组直接加以判断当前后缀在哪个串即可。 Ac代...原创 2018-07-24 20:56:12 · 390 阅读 · 0 评论 -
POJ - 3294:Life Forms (后缀数组之求至少k个串中出现的子串)
题目大意:给你n个串,求在至少n/2(大于n/2)个串出现的最长子串,按字典序从小到大输出。 解题思路:日常二分,二分长度,然后对其存在进行判断即可。这里我感觉用set处理起来比较简单,对于height[i]大于等于k的值,直接把 pos[sa[i]] 和 pos[sa[i-1]] 加入到set中。最后判断set中的元素个数是否大于n/2,如果大于 就把 sa[i] 储存...原创 2018-07-31 20:08:21 · 246 阅读 · 0 评论 -
POJ - 3261:Milk Patterns (后缀数组之求至少重复k次的子串长度)
题目大意:给你一个串,以及整数k,求这个串中至少重复k次的子串的长度。 解题思路:二分二分二分!!!后缀数组,一言不合就二分。直接二分长度,然后判断当前长度是否合法即可。 Ac代码:#include <iostream>#include <cstdio>#include <cstring>#include <...原创 2018-07-31 19:48:24 · 192 阅读 · 0 评论 -
HDU - 5008:Boring String Problem (后缀数组之求不重复子串的第k大)
题目大意:给你一个S串,多次询问第k大的不重复子串。 解题思路:因为之前做过一个重复子串的第k大,所以这个题做的比较轻松。毕竟我感觉那个题目比这个难得多。首先用一个数组直接储存1 到 i这个位置所有的不重复子串和。查询第k大的时候直接先二分找到我们所要找的子串的起始下标。知道起始下标之后相当于我们就知道了这个串。这个时候因为题目有要求串相同的时候保证l r尽可能的...原创 2018-07-26 20:43:03 · 332 阅读 · 0 评论 -
HDU - 4416:Good Article Good sentence(后缀数组之求与其他串不相同字串)
题目大意:给你一个S串和m个T串,求S串中有多少子串不是另外m个T串的子串。 解题思路:对于所有的串,首先将他们连接。接下来我们就要统计对于0到 strlen(s) 这些位置,每个位置有多少与它重复的子串,统计出来之后拿串的总个数减去重复的即可。统计重复的就从前往后扫一遍 对于在S串和在T串的情况考虑。同时也要从后往前扫一遍。最后在把S串中自己重复的子串去掉即可。...原创 2018-07-26 09:23:12 · 324 阅读 · 0 评论 -
HDU-3948:The Number of Palindromes(后缀数组之求不相同回文子串的个数)
题目大意:给一个串S,求出所有不相同回文子串的数量。 解题思路:大体的思路是先用manacher算法跑出mp数组,然后跑一遍后缀数组,利用后缀数组实现去重。具体去重思想是假设当前 mp[sa[i]] 的长度为 k 那么这里面有多少重复的呢,首先先看 sa[i-1]和它的公共前缀,但是公共前缀不一定都是回文串,所以要取 min(height[i],mp[sa[i-1]]),...原创 2018-07-25 10:25:46 · 746 阅读 · 0 评论 -
HDU - 3553:Just a String(后缀数组之求所有子串的第k大)
教练的专题,第一题模板题,第二题多校题,话说这题真的想了好久,后缀数组的用法真的太多了。。。感觉很多时候都需要用二分来求解。特别这道题,感觉简直把二分运用到了极致。。。 题目大意:给你一个串,求它所有子串的第k大(可重复)。 解题思路:这道题目,首先我们要根据我们求出来的sa数组,因为我们sa数组是按字典序排好序的,所以理论上来说我们最小的子串应该是按照sa数组的...原创 2018-07-24 21:35:42 · 742 阅读 · 0 评论 -
POJ-1743:Musical Theme(后缀数组加高度数组的应用以及预处理)
题目链接:点击打开链接 题意解析:就是给你一长串的整数序列,让你求这个序列中存不存在最长不重复子串的长度(至少大于5)。 但是这个子串匹配不是单纯的相等,而且可以由前面的子串统一加上或减少某个数字得到。例如:1 2 3 4 5 6 7 8 9 10 的答案就是 5, 因为6 7 8 9 10可以由1到5同时加1得到。 解题思路:学校内部的比赛碰到的这道题,此时刚...原创 2017-08-02 10:57:47 · 263 阅读 · 0 评论 -
牛客网多校第一场-I题: Substring(SA求不同字串个数)
其实目前还不是很明白,先记录一下。 题目大意:给你一个只含abc的字符串,求出所有不同构的子串。同构的定义是指在所有的映射方案下不相同,例如abc可以映射为acb bac bca cab cba,这六个串是相互同构的。 解题思路:题解做法,首先把abc的所有的映射方案枚举出来,枚举出来之后按照每种映射方案把S串变换为6个串。最后求出6个串的(不同字串数量+3*单一...原创 2018-07-21 09:51:29 · 496 阅读 · 0 评论 -
后缀数组之求出现次数L到R次的字符串的个数
题目大意:给你一个字符串,求出现次数在L到R次之间的字符串的个数。 解题思路:利用height数组求解,首先我们要知道求L到R次的数量可以利用L次以上的数量减去R+1次以上的数量求得,那么这个题就转换为了求出现k次以上的字符串的个数。首先k=1 特判,即 n-sa[i]-height[i],即所有不相同子串。k>1时,利用height数组,对每k-1个heigh...原创 2018-09-23 21:09:45 · 802 阅读 · 0 评论