随笔分类 -  后缀数组

摘要:【链接】h在这里写链接【题意】 让你找出uvu形式的字符串个数。 v非空且长度为L,且u也非空【题解】 之前做过一道相同的题。 枚举u的长度. 然后从u,2u,3u...作为端点x x+L+u作为另外一个端点y 然后x和y看看能不能同时向左移... 阅读全文
posted @ 2017-10-06 19:13 AWCXV 阅读(226) 评论(0) 推荐(0)
摘要:【链接】 "链接" 【题意】 给你一个字符串s. 定义一个子串的出现值为它出现的次数 字符串的长度。 让你求里面的回文子串的最大出现值 |s| 【题解】 马拉车算法里面. 只有在回文往外扩展超过mx的时候,才出现了不同的回文。 只有这个时候需要计算。 快速计算一个子串在字符串中出现了多少次。 可以用 阅读全文
posted @ 2017-10-06 15:14 AWCXV 阅读(248) 评论(0) 推荐(0)
摘要:【题目链接】:http://www.lydsy.com/JudgeOnline/problem.php?id=1031【题意】 【题解】 后缀数组模板题; 把整个字符串扩大一倍. 即长度乘2 然后搞出后缀数组; 然后顺序枚举i; 对于sa[i]using namespace std... 阅读全文
posted @ 2017-10-04 18:45 AWCXV 阅读(169) 评论(0) 推荐(0)
摘要:【链接】h在这里写链接【题意】求两个串的最长公共子串。【题解】Sa[i]表示的是字典序为i的后缀的起始位置。可以把两个字符串合在一起(中间用一个比'z'大的字符分割);则如果Sa[i-1]len1;则它们表示s1和s2的两个后缀。取height[i]然后求最大值就可以了。(height[i]表示的是... 阅读全文
posted @ 2017-10-04 18:44 AWCXV 阅读(105) 评论(0) 推荐(0)
摘要:【链接】h在这里写链接【题意】 给你一个长度最多为2万的序列(由1..88这些数字组成)。 让你在里面找一个子串。 这个子串或它的转置子串(就是每个数字都加上或减去相同的数字)在这个序列中 出现了至少两次,且没有重叠部分。让你求这个子串最长能够多长。 这个子串的长度最少... 阅读全文
posted @ 2017-10-04 18:44 AWCXV 阅读(107) 评论(0) 推荐(0)
摘要:【链接】h在这里写链接【题意】给你一个字符串s以及一个整数k;让你找出这个字符串里面,恰好出现了k次的子串的个数。k>=1【题解】后缀数组题。对于输入的字符串。求出它的Height数组。然后预处理出ST表。便于求区间的最小值。然后顺序枚举后缀的排名i;对于height数组。height[i]实际上包... 阅读全文
posted @ 2017-10-04 18:44 AWCXV 阅读(214) 评论(0) 推荐(0)
摘要:【链接】h在这里写链接【题意】 n个人; 由姓和名组成。s1[i]和s2[i]; 有m个询问串。 问你第j个询问串,是否为某个人的姓或者名的子串。 如果是的话,那个人就要答到。 每个询问串,问有多少个人答到。 最后再输出一行,每个人分别答到 多少次。【题解】... 阅读全文
posted @ 2017-10-04 18:44 AWCXV 阅读(95) 评论(0) 推荐(0)
摘要:【链接】h在这里写链接【题意】给出一个字符串,求出至少不重叠出现2次以上的子串有多少个。【题解】枚举要找的子串的长度i;根据height数组,找出连续>=i的height;这几个起始的位置的后缀的最长公共前缀都大于等于i;且它们起始位置开始的长度为i的串ts都是一样的。(且没有其他和它们一样起始i个... 阅读全文
posted @ 2017-10-04 18:44 AWCXV 阅读(100) 评论(0) 推荐(0)
摘要:【链接】h在这里写链接【题意】 还有更简洁的题目描述吗/xk【题解】 对于lenti+lentj这一部分,比较好处理。 可以弄一个前缀和。 然后O(N)扫描一遍。 就能处理出来。 那么现在的问题就是lcp(Ti,Tj)这里 只要能算出来这个,就能得到答案了 ... 阅读全文
posted @ 2017-10-04 18:44 AWCXV 阅读(116) 评论(0) 推荐(0)
摘要:【链接】h在这里写链接【题意】 给你一个长度为n的数组a[] 设b[i] = a[i+1]-a[i]; 然后让你在b[i]里面找ABA的形式。 这里B的长度要求为m; 然后让你找这样的连续段的个数。 ni,2i,3i 枚举每一个关键点->x ... 阅读全文
posted @ 2017-10-04 18:44 AWCXV 阅读(167) 评论(0) 推荐(0)
摘要:【链接】h在这里写链接【题意】 给你一个长度为n的子串; 让你求出第k小的子串是什么; 输出答案的类型分两种; 第一种,重复的算两次,第二种,重复的算一次。 你的程序要能分别处理这两种情况。 n最大5*10^5【题解】 感觉是道裸的后缀数组了。 ... 阅读全文
posted @ 2017-10-04 18:44 AWCXV 阅读(105) 评论(0) 推荐(0)
摘要:【链接】h在这里写链接【题意】 【Description】 给你n(nlcp->则减去lcp就是新增加的子串的个数了。 (这部分lcp是什么时候算的不重要,反正你只要知道它之前有被算过就好了); ->回忆一下求n个字符的不同子串的时候的做法,则我们只要找到已经算过的,... 阅读全文
posted @ 2017-10-04 18:44 AWCXV 阅读(127) 评论(0) 推荐(0)
摘要:【链接】h在这里写链接【题意】 给你一个长度为n(n这一点可以将二分的右界设置为d-c+1; 找到一个就返回True即可。 显然前缀越长越不可能,单调性比较显然 复杂度? m*(log2n*常数)的样子? 感觉能卡过去【错的次数】0... 阅读全文
posted @ 2017-10-04 18:44 AWCXV 阅读(116) 评论(0) 推荐(0)
摘要:【链接】h在这里写链接【题意】 给你一个长度最多为1000的字符串 让你求出一个数x,这个x=这个字符串的不同子串个数;【题解】 后缀数组题。 把原串复制一份,加在原串后面(中间用分隔符分开),这样每个子串都能重复出现一次了,枚举Height的时候就都能枚举到了. 求出... 阅读全文
posted @ 2017-10-04 18:44 AWCXV 阅读(194) 评论(0) 推荐(0)
摘要:【链接】h在这里写链接【题意】给你一个长度为n的序列。问你能不能在其中找到一个最长的子串。 这个子串至少出现了k次.【题解】长度越长,就越不可能出现k次后缀数组+二分。N最大为20000;每个数字在0到1e5之间防止出错,把那个数字都加上1就好(因为N比每个数字的大小来的小,所以需要把N也开到... 阅读全文
posted @ 2017-10-04 18:44 AWCXV 阅读(103) 评论(0) 推荐(0)
摘要:【链接】h在这里写链接【题意】给你n个字符串。让你找一个字符串s.设s'为这个字符串的逆序。要求s或者s'在每个字符串里都能够找得到.并且要求s的长度最长。求出这个最长的串的长度.【题解】把n个串,每个串逆序或者是倒序.顺序加成一个串.(标记一下每个串是属于第几个串..逆序顺序属于同一个串!)(中间... 阅读全文
posted @ 2017-10-04 18:44 AWCXV 阅读(85) 评论(0) 推荐(0)
摘要:【链接】h在这里写链接【题意】问你n个串里面有没有一个串,使得其余n-1个串都是他的子串。【题解】后缀数组.答案肯定是那个最长的串。则,把那个串求一下Sa数组(注意仅仅那个最长的串求)。然后枚举其余n-1个子串。看看它们是不是那个最长的串的子串;(可以用一个类似二分的东西判断它是不是子串。);(字符... 阅读全文
posted @ 2017-10-04 18:44 AWCXV 阅读(98) 评论(0) 推荐(0)
摘要:【链接】h在这里写链接【题意】找一个字典序最小的公共最长子串;【题解】后缀数组。把所有的串用不同的分隔符分开。(大于'z'的分隔符);然后求出那几个固定的数组。二分一下那个子串的长度.看看是不是在N个串里面都有这个串即可。可以用一个下标,来记录某个位置开始的后缀是第几个串里面的(即输入的N个串里面的... 阅读全文
posted @ 2017-10-04 18:44 AWCXV 阅读(109) 评论(0) 推荐(0)
摘要:【链接】h在这里写链接【题意】接上一篇文章【题解】一个字符串所有不同的子串的个数=∑(len-sa[i]-height[i])【错的次数】0【反思】在这了写反思【代码】#include using namespace std;const int N = 2e3;const int MAX_CHAR... 阅读全文
posted @ 2017-10-04 18:44 AWCXV 阅读(120) 评论(0) 推荐(0)
摘要:【链接】h在这里写链接【题意】 给你n(nusing namespace std;const int N = 1e5 + 500;const int MAX_CHAR = 255;//每个数字的最大值。char s[N + 10];//如果是数字,就写成int s[N+10]就好,从0开始存i... 阅读全文
posted @ 2017-10-04 18:44 AWCXV 阅读(173) 评论(0) 推荐(0)