点击打开链接
题意:问连续重复部分最多的串是什么,不能重叠,且我们要字典序最小的串如xbcabcab,有bcabca重复次数为2,cabcab重复次数也为2,那么要前边那个
思路:以前写过一个类似的,SPOJ 687,这个只是求连续重复部分最多的串的次数,并不需要将按字典序最小串输出,那么我们可以用到SPOJ687的代码,用它我们可以求出那个重复的次数和满足这个次数的串的长度,那么就只差找到字...
分类:
编程语言 时间:
2016-05-18 18:43:57
阅读次数:
214
4278: [ONTAK2015]Tasowanie Description 给定两个数字串A和B,通过将A和B进行二路归并得到一个新的数字串T,请找到字典序最小的T。 给定两个数字串A和B,通过将A和B进行二路归并得到一个新的数字串T,请找到字典序最小的T。 Input 第一行包含一个正整数n(1 ...
分类:
编程语言 时间:
2016-05-13 13:46:34
阅读次数:
212
POJ 1743 Description A musical melody is represented as a sequence of N (1<=N<=20000)notes that are integers in the range 1..88, each representing a k ...
分类:
编程语言 时间:
2016-05-13 11:57:27
阅读次数:
240
点击打开链接
题意:问一个串的子串可以有多少种,就是将重复的去掉
思路:每个子串一定是某个后缀的前缀,对于某个后缀sa来说,它的最长前缀就是重复的个数,那么减去就好,而最长前缀可以通过后缀数组的sa数组线性求出
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll...
分类:
编程语言 时间:
2016-05-13 04:04:47
阅读次数:
195
题意:
形如UVU这种字符串,其中U、V都是字符串,V的长度为L,那么称此种字符串为L-Gap String,要求的是一个字符串中有多少个子串为L-Gap String。
题解:
网上有很多关于此题的题解,但是都只是说了怎么做的,并没有说为什么是这样。
开始其实也不懂,后面写出来就好像懂了。
大概说一下思路,首先用后缀数组求出lcp是很容易想到的,
我们可以每次枚举U的长度L,那么就可...
分类:
其他好文 时间:
2016-05-12 23:47:51
阅读次数:
307
点击打开链接
题意:给个串问最小的后缀,但是这个串是个环
思路:是个环也好处理,那么就将串复制一遍加到后面就行了,然后求出后缀数组和高度数组,刚开始我写的是就求出后缀数组sa,然后从排名第1开始找,比如找到了I,排名为I的从第sa[I]开始,那么如果这个值小于输入串的长度,直接输出就行,提交WA,看了看讨论,有这样的数组,aaaa那么应该输出1,而那个程序输出4,然后想到用高度数组,刚开始找到...
分类:
编程语言 时间:
2016-05-12 23:39:33
阅读次数:
192
http://poj.org/problem?id=2774
思路:后缀数组。(摘自罗穗骞的国家集训队论文)字符串的任何一个子串都是这个字符串的某个后缀的前缀。求 A 和 B 的最长公共子串等价于求 A 的后缀和 B 的后缀的最长公共前缀的最大值。如果枚举A和 B 的所有的后缀,那么这样做显然效率低下。由于要计算 A 的后缀和 B 的后缀的最长公共前缀,所以先将第二个字符串写在第一个字符串后面,中...
分类:
其他好文 时间:
2016-05-12 15:43:31
阅读次数:
243
1. 概述
后缀数组是一种解决字符串问题的有力工具。相比于后缀树,它更易于实现且占用内存更少。在实际应用中,后缀数组经常用于解决字符串有关的复杂问题。
本文大部分内容摘自参考资料[1][2]。
2. 后缀数组
2.1 几个概念
(1)后缀数组SA 是一个一维数组,它保存1..n 的某个排列SA[1],SA[2],……,SA[n],并且保证Suffix(SA...
分类:
编程语言 时间:
2016-05-07 11:15:05
阅读次数:
224
题目链接UVa11107 Lifeform题解
学了高大上的后缀数组但是还是不怎么会用,关键是版子最开始打错了,害得我必须再重新理解一遍才能找出bug,开始以为是memset(sa,0,sizeof(sa))这句少写了但是并不是这样.话说字符串的题特别容易RE.
这道题二分答案然后后缀数组,先将字符串合并,每个串后加一个奇怪的不相同的字符,二分长度,然后在height数...
分类:
其他好文 时间:
2016-05-07 10:04:12
阅读次数:
166
点击打开链接
题意:将一个数列分成连续的三段,每段必须有数字,问这三段反转后的数列的最小字典序的方案,并输出,注意:第一个数比后面所有都大
思路:因为第一个数最大,那么将整个数列反转后的字典序最小的后缀为第一段分开位置,但是要判断情况,如最后还要至少剩下两个数完成后两段,接下来找第二段的分开位置,不可以像刚刚那么找了,想这个例子,将第一段去掉后是这样的,1 3 2 1 100 如果和第一次一样...
分类:
编程语言 时间:
2016-05-07 09:04:17
阅读次数:
180