
数据结构--后缀数组
focus_best
这个作者很懒,什么都没留下…
展开
-
后缀数组
后缀数组 要学习后缀数组的各种用法需要看刘汝佳的训练指南P219部分并且看罗穗骞论文《后缀数组——处理字符串的有力工具》.下面给出我的后缀数组模板:#include#include#includeusing namespace std;const int maxn = 100000 + 100; //既要大于字符串的长度,也要大于基数排序m的大小struct Su原创 2014-04-16 17:24:21 · 875 阅读 · 0 评论 -
POJ 1226 Substrings(后缀数组)
POJ 1226 Substrings(后缀数组)http://poj.org/problem?id=1226题意:给你N个字符串,要你求这样一个最长子串的长度,要求这个子串在每个原始串中或原始串的逆串中都出现过一次.输出该串长度即可.分析: 罗穗骞《后缀数组——处理字符串的有力工具》例题.类似于SPOJ220:http://blog.youkuaiyun.com/u013480600/a原创 2014-04-19 22:56:26 · 988 阅读 · 0 评论 -
SPOJ 220 . Relevant Phrases of Annihilation(后缀数组)
SPOJ 220 . Relevant Phrases of Annihilation(后缀数组)题意:给你N个串,要你在这N个串中找出这样一个最长的子串长度.该串在任意一个串中至少出现了2次,并且不重叠的.分析: 罗穗骞《后缀数组——处理字符串的有力工具》例题. 首先依然连接所有串,并且加上分隔符.然后依然是二分答案,看看长为limit的这个串是否存在.在每个height原创 2014-04-19 20:17:49 · 1111 阅读 · 1 评论 -
POJ 3294 Life Forms(后缀数组)
POJ 3294 Life Forms(后缀数组)http://poj.org/problem?id=3294题意:给你n个字符串,然后要你求出超过一半字符串中的最长公共连续字串是什么,如果有多解,按字典序输出.分析: 罗穗骞《后缀数组——处理字符串的有力工具》例题. 首先本题依然是连接所有字符串,并且相邻字符串之间用不会出现的不同符号连接.(这里有100个串,如果用c原创 2014-04-19 19:21:37 · 1369 阅读 · 0 评论 -
URAL 1517. Freedom of choice(后缀数组:最长公共连续子串)
URAL 1517. Freedom of choice(后缀数组:最长公共字串)题意:给你两个等长的串,求他们的最长公共字串.分析: 罗穗骞《后缀数组——处理字符串的有力工具》例题.其实本题就是POJ2774的略微加强版:http://blog.youkuaiyun.com/u013480600/article/details/24045165这里要求我们输出这个最长公共串了.(题目中要原创 2014-04-18 20:36:15 · 1079 阅读 · 2 评论 -
POJ 2774 Long Long Message(后缀数组:公共子串)
POJ 2774 Long Long Message(后缀数组:公共子串)http://poj.org/problem?id=2774题意:给你两个长字符串,要你输出这两个字符串的最长公共字串长度.分析: 罗穗骞《后缀数组——处理字符串的有力工具》例题. 首先如果这两个长字符串存在某个最长的公共子串,那么该子串一定分别是这两个串的后缀的前缀.所以我们将两个串中间加一个符原创 2014-04-18 20:11:05 · 1584 阅读 · 0 评论 -
POJ 3261 Milk Patterns(后缀数组)
POJ 3261 Milk Patterns(后缀数组)http://poj.org/problem?id=3261题意:给你一个长N的数字串和K,要你在数字串中找到那个最长的字串,该字串在原始串中至少出现了K次.问这个最长字串的长度.分析: 罗穗骞论文例题. 同样建立后缀数组,求出sa和height.将原始问题边为判定问题:是否存在长度为l的串至少出现了k次.原创 2014-04-16 21:07:47 · 968 阅读 · 0 评论 -
POJ 2406 Power Strings(后缀数组做法超时)
POJ 2406 Power Strings(后缀数组)http://poj.org/problem?id=2406题意:一个串确定是由一个或多个循环节构成的,现在要你求出这个串由最多几个循环节构成的.(即用串长除以最短循环节的长度).分析:本题可以用KMP算法求解,简单方便代码段只有30行,O(n)复杂度:http://blog.youkuaiyun.com/u013480600/artic原创 2014-04-17 18:48:14 · 1305 阅读 · 0 评论 -
SPOJ 705 New DistinctSubstrings (后缀数组)
SPOJ 705 Distinct Substrings(后缀数组)题意:给你一个长N的字符串,问你该字符串中出现了多少个不同的子串?分析:论文例题. 首先建立后缀数组,求出sa和height数组. 对于任意子串,它必然是一个后缀的前缀.然后依次从height[1]到height[n-1]来处理每个后缀.每个后缀会贡献n-1-sa[i]个不同的前缀,但是原创 2014-04-16 23:26:42 · 1104 阅读 · 0 评论 -
URAL 1297 Palindrome(最长回文子串:后缀数组)
URAL 1297 Palindrome(最长回文子串:后缀数组)题意:给你一个字符串,要你求出这个串中的最长回文字串,如果存在多个,则输出第一次出现的那个.分析:论文例题. 首先其实本题用manacher算法更为简单方便:http://blog.youkuaiyun.com/u013480600/article/details/23060715http://blog.csdn原创 2014-04-17 17:11:18 · 2245 阅读 · 0 评论 -
SPOJ 694 Distinct Substrings(后缀数组)
SPOJ 694 Distinct Substrings(后缀数组)题意:给你一个长N的字符串,问你该字符串中出现了多少个不同的子串?分析:论文例题. 首先建立后缀数组,求出sa和height数组. 对于任意子串,它必然是一个后缀的前缀.然后依次从height[1]到height[n-1]来处理每个后缀.每个后缀会贡献n-1-sa[i]个不同的前缀,但是原创 2014-04-16 23:12:52 · 1063 阅读 · 0 评论 -
POJ 1743 Musical Theme(后缀数组)
POJ 1743 Musical Theme(后缀数组)http://poj.org/problem?id=1743题意:给你一个长为n的数字序列,要你求出该序列中最长的满足下面要求的序列长度:原序列中存在不重叠的两个序列,这两个序列长度相同且将第一个序列的所有数字加上某个常数可以得到第二个序列.分析:本题可见罗穗骞《后缀数组——处理字符串的有力工具》. 首先我们要求的原创 2014-04-16 20:04:16 · 1204 阅读 · 0 评论 -
后缀数组
后缀数组 后缀数组就是把一个文本串的所有后缀按字典序从小到大排放的数组。详细介绍见刘汝佳《算法竞赛训练指南》。 AC自动机可以处理多模板的文本匹配问题,而后缀数组也可以处理多模板的文本匹配问题。那么它们有什么区别呢? AC自动机需要事先知道所有的模板,然后对于一个(在线输入的)文本串进行多模板匹配,也就是说模板一定要全部事先知道,需要匹配原创 2015-03-31 00:46:04 · 3077 阅读 · 0 评论