
后缀数组-后缀自动机
qpswwww
这个作者很懒,什么都没留下…
展开
-
[省选前题目整理][BZOJ 2754][SCOI 2012]喵星球上的点名(后缀数组)
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=2754题解来自出题人满满的恶意。。。。 有两种做法:1、AC自动机 2、后缀数组。 AC自动机做法很复杂,因为此题非常丧病地没有限定字符集的大小,这样就导致不能用Trie树传统的保存儿子的方式,只能用map,并且这样会让最终的算法复杂度多一个loglog。而后缀数组的做法就随意了很多,因为S原创 2015-04-02 19:03:54 · 1064 阅读 · 0 评论 -
[省选前题目整理][UOJ 35]后缀排序(后缀数组)
题目链接http://uoj.ac/problem/35思路后缀数组裸题。代码#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <algorithm>#define MAXN 1000000using namespace std;int sa[MAXN],rank[MAXN]原创 2015-04-02 20:32:08 · 801 阅读 · 0 评论 -
[省选前题目整理][BZOJ 1031][JSOI 2007]字符加密Cipher(后缀数组)
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=1031思路根据题目要求,就是要给JSOI07这样给定的字符串的所有变换后的串进行排序,并按名次从低到高输出每个变换后的串的最后一位字符。那么首先把JSOI07这个字符串断环为链,变成JSOI07JSOI07,并删去最后一个字符,变成JSOI07JSOI0,防止排序后出现两个JSOI07的情况,然原创 2015-04-03 08:05:28 · 631 阅读 · 0 评论 -
[POJ 3415]Common Substrings(后缀数组)
题目链接http://poj.org/problem?id=3415题目大意求字符串A与BA与B的长度大于等于mm的公共子串个数。思路看到公共子串一类的题目,很容易想到用后缀数组做。我们首先把BB串加到AA串后面,中间用一个字符$分割开,然后求后缀数组 。对于AA的后缀ii和BB的后缀jj而言,若它们的LCP>=mLCP>=m,则它们会给最终的答案贡献(i−m+1)(j−m+1)(i-m+1)(j原创 2015-04-09 21:51:56 · 423 阅读 · 0 评论 -
[SPOJ DISUBSTR]Distinct Substrings(后缀数组)
题目链接http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19282题目大意给出一个串,求这个串中有多少个不同的子串。思路如果计入重复的话,这个串的子串个数为n(n+1)2\frac{n(n+1)}2(一共有nn个后缀,对于以下标tt开头的后缀,有tt个后缀的前缀,就是个等差数列求和) 那么现在不计入重复,可以很容易发现,后缀s原创 2015-04-08 21:53:57 · 490 阅读 · 0 评论 -
[BZOJ 3238][AHOI 2013]差异(后缀数组+单调栈)
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=3238思路代码#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <algorithm>#define MAXN 1000000using namespace std;ty原创 2015-04-07 21:56:53 · 640 阅读 · 0 评论 -
[POJ 1743]Musical Theme(后缀数组)
题目链接http://poj.org/problem?id=1743题目大意给出一个序列,要在它的差分序列中找两个完全相同且互不重叠的子串,求这样的子串的最大长度。思路不妨设差分后的序列长度为nn。 可以考虑二分这个子串的长度,问题变成判定原序列中是否存在长度为kk的两个完全相同且互不重叠的子串。 我们可以在heightheight数组中找出若干个连续的区间段[Li,Ri][L_i,R_i],对原创 2015-04-08 21:04:33 · 447 阅读 · 0 评论 -
[POJ 2774]Long Long Message(后缀数组)
题目链接http://poj.org/problem?id=2774题目大意求两个字符串a与ba与b的最长公共子串思路我们可以把bb串拼到aa串后面,中间插入一个从未出现过的分割符(比如$、#之类的),那么这个新串中任意两个后缀的LCP 具体做法可以参考《后缀数组——处理字符串的有力工具》,通过找规律可以发现,对于任意的i>1,height[i]i>1,height[i]的值有可能是a串里两个后缀原创 2015-04-08 17:16:27 · 600 阅读 · 0 评论 -
[URAL 1297]Palindrome(后缀数组)
题目链接http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=12406题目大意给出一个字符串AA,求该字符串中的最长回文子串思路蒟蒻太弱了。。。这个题都能跪一上午。。。 我们定义一个字符串BB,为原串反转后的字符串,然后枚举以下标ii为中心的最长回文子串,这就是要求AA和BB的后缀ii,得到两个后缀的LCP,这是这个回文子串的一半原创 2015-04-09 11:07:43 · 506 阅读 · 0 评论