摘要:题意:给定一个长度为n的下标从0开始的小写字母字符串,每次对于当前的i寻找一个j使得后缀i与后缀j的lcp最大,(j<i)若lcp相同则取较小的 若lcp为0则输出0与当前字符,i自增1,否则输出lcp的值与j,i自增lcp的值,以上过程重复直到i>=n 要求模拟这个过程 n<=1e5,sigma
阅读全文
摘要:题意: 给一个长度为n的字符串s[0..n-1],但i的后继不再是i+1,而是(i*i+1)%n,求所有长度为n的“子串”中,字典序最大的是谁 n<=150000,s[i]=0..9 思路:后缀数组 因为前驱与后继的关系已经变化,就不能用下标直接加减 i的后继是唯一的,i的前驱却不一定 所以对于后继
阅读全文
摘要:题意: n<=10,len<=100 思路: 只有一个字符串的时候特判一下
阅读全文
摘要:题意: n<=10,len<=1e4 思路:
阅读全文
摘要:题意: n<=1e5 思路: 我的做法和题解有些不同 题解是维护A的单调栈算B的贡献,反过来再做一次 我是去掉起始位置不同这个限制条件先算总方案数,再把两个串内部不合法的方案数减去 式子展开之后是 sigma(lcp(i,j))-K*L*(L+1)/2+合法(i,j)对数,其中L为连续的height
阅读全文
摘要:题意: n<=1e5 思路: From http://hzwer.com/6152.html 往后匹配多远 r 用ST表求lcp即可。。。往前 l 就把串反过来再做一下。。 但是有可能求出来的最长串可以前移/后移几位即开头可以在落在[i−l,i−l+(l+r)mod L] 区间内字典序最小的还要用S
阅读全文
摘要:题意: 思路:显然len(t[i])+len(t[j])这部分的和是一定的 那么问题就在于如何快速求出两两之间lcp之和 考虑将它们排名后用SA可以很方便的求出lcp,且对答案没有影响,因为形式都是数对 所以用SA求出height 每个位置的height作为lcp的区间为扩展到最左最右,直到heig
阅读全文
摘要:题意: 两杯“r相似” (r>1)的酒同时也是“1 相似”、“2 相似”、……、“(r−1) 相似”的。 n<=300000 abs(a[i])<=10^9 思路:对于i,j两个后缀,它们的贡献只与它们的lcp有关 而lcp又是它们之间height的最小值 所以可以把height从大到小排序 然后用
阅读全文
摘要:题意: n<=100 len[i]<=1000 思路:这是一道论文题
阅读全文
摘要:题意:求两个字符串的最长公共子串 n<=1000 思路:这是一道论文题
阅读全文
摘要:题意: n<=1000000,cas较大 思路:这是一道论文题 后缀数组已弃疗,强行需要DC3构造,懒得(不会)写 显然钦定的算法是KMP
阅读全文
摘要:题意:求一个字符串的最长回文子串 n<=1000 思路:这是一道论文题 需要注意的细节: 1.奇偶分类 2.中间的分割符与最后的附加字母都是最小值,但两者不能相同,否则height可能会出现问题 答案即为min(height[rank[x]+1]...height[rank[y]])
阅读全文
摘要:题意:求一个字符串的不相同的子串个数 n<=1000 思路:这是一道论文题
阅读全文
摘要:题意:求字符串的可重叠的k次最长重复子串 n<=20000 a[i]<=1000000 思路:后缀数组+二分答案x,根据height分组,每组之间的height>=x 因为可以重叠,所以只要判断是否有一组的height个数>=k即可
阅读全文
摘要:题意:求一个字符串的不重叠最长相同变化的子串 n<=20000 思路:这是一道论文题 我们将原串两两之间作差,可以发现所求的相同变化的子串作出的差相同 问题就转化成了不重叠的最长重复子串 显然答案有二分性,二分答案,将问题转化为是否存在长度为k的相同子串 将后缀分成连续的若干组,每组相邻的heigh
阅读全文
摘要:题意:将一个长度为2n(复制粘贴后)的字符串的所有长度为n的后缀从小到大排序,并依次输出它们的最后一个字母。 n<=100000 思路:裸SA,模板真难背 P党不得不写成C++风格
阅读全文
摘要:1 #include 2 #include 3 #include 4 using namespace std; 5 const int M=100010; 6 char S[M]; 7 int n,i,s[M],sa[M],wa[M],wb[M],wc[M],wd[M],height[M],rank[M]; 8 bool cmp(int *r,int a,int b,int l)...
阅读全文