后缀数组
文章平均质量分 76
thy_asdf
我也不知道说什么...
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
后缀数组入门题——2323后缀排序
题目大意:给定一个字符串,输出排名为1到n的后缀的起始位置 思路:按后缀数组的sa的定义,直接输出即可 code: #include #include using namespace std; const int maxl=200000; int rank[maxl+10],sa[maxl+10],n,sum[maxl+10],trank[maxl+10],tsa[maxl+10];原创 2014-12-03 11:49:26 · 802 阅读 · 0 评论 -
uva10829 L-Gap Substrings
传送门:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=20&page=show_problem&problem=1770 思路:这题和上一题SPOJ687的思路一样,也是枚举长度,再对于i和i+j+L向前向后匹配,但是这一题只能在后面接一个反串。 #include #incl原创 2015-08-18 15:31:29 · 635 阅读 · 0 评论 -
bzoj4199&uoj131: [Noi2015]品酒大会
传送门:http://uoj.ac/problem/131 思路:先求出height,然后根据排名重新给后缀标号,按height从大到小做,每次合并i和i-1,用并查集维护,更新答案。 #include #include #include #define max(a,b) (a>b?a:b) #define min(a,b) (a<b?a:b) const int maxn=300010; u原创 2015-08-16 16:23:00 · 1841 阅读 · 0 评论 -
spoj687 REPEATS
传送门:http://www.spoj.com/problems/REPEATS/ 思路:又是一道论文题。 论文上是这么说的 这题用到了枚举长度的方法,往后匹配我们只要看两个后缀的LCP即可,而往前匹配,一个显然的做法是把串反过来,接到后面看对应的后缀的LCP。实际上并不需要这样,我们只需要看它还差几个字符就可以是循环次数加1,那我们就往前移这么多位,看这两个后缀的LCP长度是否足够原创 2015-08-17 11:50:36 · 920 阅读 · 0 评论 -
codeforces 232D. Fence
传送门:http://codeforces.com/problemset/problem/232/D 思路:首先就是差分,设d[i]=a[i+1]-a[i]; 然后题目的”匹配"就可以转化为差分数组每一位的和为0 也就是这段区间取相反数之后可以与原区间匹配。 这就可以转化为字符串问题。 设当前询问为(x,y) 把整个串取相反数,再复制到后面,用后缀数组向上向下二分出可行区间(lcp(s原创 2015-08-14 18:02:35 · 627 阅读 · 0 评论 -
bzoj1031: [JSOI2007]字符加密Cipher
传送门:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1031 思路:非常水的后缀数组,把串复制一遍到后面,后缀排序即可。 #include #include #include const int maxn=200010; using namespace std; int n,t1[maxn],t2[maxn],sa[maxn],ran原创 2015-08-13 17:06:39 · 644 阅读 · 0 评论 -
bzoj3676: [Apio2014]回文串
传送门:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3676 思路:首先要知道一个结论,本质不同的回文串的个数是O(n)的。 从manacher的过程就可以看出来,使最远边界扩展的回文串才是与之前本质不同的,边界只会扩展到n,所以个数是O(n)的 然后对于每个本质不同的字符串,在后缀数组里向上向下二分,找出它的出现次数即可得到答案。原创 2015-08-13 17:16:57 · 836 阅读 · 0 评论 -
[Usaco2006 Dec]Milk Patterns
Description 农夫John发现他的奶牛产奶的质量一直在变动。经过细致的调查,他发现:虽然他不能预见明天 产奶的质量,但连续的若干天的质量有很多重叠。我们称之为一个“模式”。 John的牛奶按质量可以被赋予一个0到1000000之间的数。并且John记录了N(1 牛奶质量值。他想知道最长的出现了至少K(2 比如1 2 3 2 3 2 3 1 中 2 3 2 3出现了两次原创 2014-12-03 17:05:28 · 525 阅读 · 0 评论 -
Pku3080 Blue Jeans
Pku3080 Blue Jeans Time Limit:1000MS Memory Limit:265536K Total Submit:4 Accepted:3 Description The Genographic Project is a research partnership between IBM and The National Geographic Soc原创 2014-12-03 20:46:25 · 539 阅读 · 0 评论 -
pku1734 Musical Theme
Description 我们用N(1 <= N <=5000)个音符的序列来表示一首乐曲,每个音符都是1..88范围内的整数,每个数表示钢琴上的一个键。很不幸这种表示旋律的方法忽略了音符的时值,但这项编程任务是关于音高的,与时值无关。 许多作曲家围绕一个重复出现的“主题”来构建乐曲。在我们的乐曲表示法中,“主题”是整个音符序列的一个子序列,它需要满足如下条件: 长度至少原创 2014-12-03 20:27:02 · 401 阅读 · 0 评论 -
最长可重叠的重复子串
题目大意:给定一个字符串,求它的最长可重叠的重复子串的长度 思路:求出height数组之后,输出最大值即可。因为最长可重叠的重复子串一定是在相邻两个后缀的最长公共前缀,即height,而要求最大值,输出height最大值即可#include #include #define max(a,b) a>b?a:b using namespace std; const int maxl=400000;原创 2014-12-03 11:59:06 · 1340 阅读 · 0 评论 -
APIO2015&2014题解
传送门:似乎uoj都有 思路: APIO2015: 巴厘岛的雕塑: 看到位运算,又要求结果最小,最外层肯定是个从高位到低位的按位贪心 这里有两个部分分, task1:N task2:N 先考虑task1 令sum[i]表示雕塑权值的前缀和 假设我们考虑到了第bit位 那么我们怎么知道在前面位数满足要求的前提下,当前位能否是0 DP即可 设f[i][j]表示前i原创 2016-04-26 10:03:20 · 1557 阅读 · 0 评论
分享