摘要: 【题目链接】 http://codeforces.com/problemset/problem/427/D 【题目大意】 给出一个两个字符串,求出最短且在两个字符串中唯一的公共子串。 【题解】 以原字符串的两倍建立自动机,按字典序在parent树上搜索, 得到的第一个长度为n的字符串就是答案。 【代 阅读全文
posted @ 2016-11-15 23:45 forever97 阅读(493) 评论(2) 推荐(0) 编辑
摘要: 【题目链接】 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=524&page=show_problem&problem=660 【题目大意】 给出一个字符串,求出与其循环同构的字符串中,字 阅读全文
posted @ 2016-11-15 23:43 forever97 阅读(368) 评论(0) 推荐(0) 编辑
摘要: 【题目链接】 http://www.spoj.com/problems/NSUBSTR/ 【题目大意】 给一个字符串S,令F(x)表示S的所有长度为x的子串中,出现次数的最大值。 求出所有的F。 【题解】 在SAM中,一个串出现的次数就是|Right(s)|,我们按长度从小到大分配内存单位, 从后往 阅读全文
posted @ 2016-11-15 23:41 forever97 阅读(305) 评论(0) 推荐(0) 编辑
摘要: 【题目链接】 http://acm.hdu.edu.cn/showproblem.php?pid=4416 【题目大意】 给出一个字符串,然后,给出一个字符串集合,问在该字符串中出现,且不在字符串集合中出现的子串总数。 【题解】 将集合中所有的子串在自动机上跑,保存匹配到的位置的最长匹配, 用于在p 阅读全文
posted @ 2016-11-15 23:39 forever97 阅读(438) 评论(0) 推荐(0) 编辑
摘要: 【题目链接】 http://acm.hdu.edu.cn/showproblem.php?pid=4622 【题目大意】 给出一个长度不超过2000的字符串,有不超过10000个询问,问【L,R】子串中出现的子串数目,相同子串不可重复计数。 【题解】 考虑到字符串长度只有两千,我们对每个位置往后建立 阅读全文
posted @ 2016-11-15 23:38 forever97 阅读(292) 评论(0) 推荐(0) 编辑
摘要: 【题目链接】 http://www.spoj.com/problems/SUBLEX/ 【题目大意】 给出一个字符串,求其字典序排名第k的子串 【题解】 求出sam上每个节点被经过的次数,然后采用权值线段树上查找第k大数类似的方法, 每次确定查找范围,进入相应的子树,同时输出路径上的点即可。 【代码 阅读全文
posted @ 2016-11-15 23:35 forever97 阅读(284) 评论(0) 推荐(0) 编辑
摘要: 【题目链接】 http://acm.hdu.edu.cn/showproblem.php?pid=4436 【题目大意】 给出一些字符串,由0~9组成,求出所有不同子串的和。 【题解】 将所有字符串添加拼接符10连接在一起建立自动机, 从起点开始遍历所有节点,就能计算所有的子串和了。注意转移的时候只 阅读全文
posted @ 2016-11-15 23:33 forever97 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 【题目链接】 http://www.spoj.com/problems/LCS2/ 【题目大意】 求n个串的最长公共子串 【题解】 对一个串建立后缀自动机,剩余的串在上面跑,保存匹配每个状态的最小值, 取最小值中的最大值即可。由于跑的地方只记录了匹配结尾的状态, 所以还需要更新parent树上的状态 阅读全文
posted @ 2016-11-15 23:31 forever97 阅读(677) 评论(0) 推荐(1) 编辑
摘要: 【题目链接】 http://codeforces.com/contest/235/problem/C 【题目大意】 给出一个字符串,给出一些子串,问每个子串分别在母串中圆环匹配的次数,圆环匹配的意思是将该子串拆成两段再首位交换相接的串和母串匹配,比如aaab变成baaa,abaa,aaba再进行匹配 阅读全文
posted @ 2016-11-15 23:29 forever97 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 【题目链接】 http://acm.timus.ru/problem.aspx?num=1297 【题目大意】 求最长回文子串,并输出这个串。 【题解】 我们将原串倒置得到一个新的串,加一个拼接符将新串拼在原串的后面, 那么枚举对称的中心点, 在两个串在组合成的串的对应位置的后缀的最长公共前缀 就是 阅读全文
posted @ 2016-11-15 23:18 forever97 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 【题目链接】 http://poj.org/problem?id=2774 【题目大意】 求最长公共子串 【题解】 将两个串中间嵌一个字符相连,求一遍后缀数组 如果排名相邻的两个后缀的开端是分属于两个串的, 那么他们的最长公共前缀就可以用来更新答案 【代码】 阅读全文
posted @ 2016-11-15 23:15 forever97 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 【题目链接】 http://www.spoj.com/problems/REPEATS/en/ 【题目大意】 求重复次数最多的连续重复子串的长度。 【题解】 考虑错位匹配,设重复部分长度为l,记s[i]和s[i+l]前缀匹配得到的最长长度为r,枚举所有的l和i,得到r,那么答案就是r/l+1的最大值 阅读全文
posted @ 2016-11-15 23:11 forever97 阅读(386) 评论(0) 推荐(0) 编辑
摘要: 【题目链接】 poj.org/problem?id=3693 【题目大意】 求一个串重复次数最多的连续重复子串并输出,要求字典序最小。 【题解】 考虑错位匹配,设重复部分长度为l,记s[i]和s[i+l]前缀匹配得到的最长长度为r, 枚举所有的l和i,得到r,那么答案就是r/l+1的最大值。 计算任 阅读全文
posted @ 2016-11-15 23:07 forever97 阅读(293) 评论(0) 推荐(0) 编辑
摘要: 【题目链接】 http://www.spoj.pl/problems/PHRASES/ 【题目大意】 求在每个字符串中出现至少两次的最长的子串 【题解】 注意到这么几个关键点:最长,至少两次,每个字符串。 首先对于最长这个条件,我们可以想到二分答案, 然后利用后缀数组所求得的三个数组判断是否满足条件 阅读全文
posted @ 2016-11-15 23:04 forever97 阅读(330) 评论(0) 推荐(1) 编辑
摘要: 【题目链接】 http://poj.org/problem?id=3415 【题目大意】 求出两个字符串长度大于k的公共子串的数目。 【题解】 首先,很容易想到O(n2)的算法,将A串和B串加拼接符相连, 做一遍后缀数组,把分别属于A和B的所有后缀匹配,LCP-k+1就是对答案的贡献, 但是在这个基 阅读全文
posted @ 2016-11-15 22:59 forever97 阅读(312) 评论(0) 推荐(0) 编辑
摘要: 【题目链接】http://www.lydsy.com/JudgeOnline/problem.php?id=1717 【题目大意】 求一个最长的串,使得其在母串中出现的次数达到要求 【题解】 二分答案,利用后缀数组求出的height数组进行检验 【代码】 阅读全文
posted @ 2016-11-15 22:54 forever97 阅读(337) 评论(0) 推荐(0) 编辑
摘要: 【题目链接】 http://poj.org/problem?id=3261 【题目大意】 求最长可允许重叠的出现次数不小于k的子串。 【题解】 对原串做一遍后缀数组,二分子串长度x,将前缀相同长度超过x的后缀分组, 如果存在一个大小不小于k的分组,则说明答案可行,分治得到最大可行解就是答案。 【代码 阅读全文
posted @ 2016-11-15 22:50 forever97 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 【题目链接】 http://poj.org/problem?id=3294 【题目大意】 求出在至少在一半字符串中出现的最长子串。 如果有多个符合的答案,请按照字典序输出。 【题解】 将所有的字符串通过不同的拼接符相连,作一次后缀数组, 二分答案的长度,然后在h数组中分组,判断是否可行, 按照sa扫 阅读全文
posted @ 2016-11-15 22:46 forever97 阅读(314) 评论(0) 推荐(0) 编辑
摘要: 【题目链接】 http://poj.org/problem?id=1743 【题目大意】 给出一首曲子的曲谱,上面的音符用不大于88的数字表示, 现在请你确定它主旋律的长度,主旋律指的是出现超过一次, 并且长度不小于5的最长的曲段,主旋律出现的时候并不是完全一样的, 可能经过了升调或者降调,也就是说 阅读全文
posted @ 2016-11-15 22:38 forever97 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 【题目链接】 http://www.spoj.com/problems/SUBST1/ 【题目大意】 给出一个串,求出不相同的子串的个数。 【题解】 对原串做一遍后缀数组,按照后缀的名次进行遍历, 每个后缀对答案的贡献为n-sa[i]+1-h[i], 因为排名相邻的后缀一定是公共前缀最长的, 那么就 阅读全文
posted @ 2016-11-15 22:33 forever97 阅读(338) 评论(0) 推荐(0) 编辑