[bzoj][1] [luogu][2] sol 首先把两个串拼在一起跑后缀数组。中间插入一个没有出现过的字符。 求完后缀数组之后考虑$O(n^2)$暴力统计:枚举前一个串和后一个串的两个位置,$ans+=lcp(i,j)$。 现在改为把一共$2n$个后缀按$Rank$顺序插入,每插入一个后缀,统计 ...
分类:
其他好文 时间:
2018-02-24 23:03:25
阅读次数:
208
[bzoj][1] [luogu][2] sol 我不得不说这道题很码。。。 求$lcp$的话当然先来一发后缀数组+ST表。 可以二分一个答案$mid$,可知序列中与$c$的$lcp$大于等于$mid$的后缀肯定是$Rank$上的连续一段。 再二分一下找出这一段的左端点和右端点,设为$[up,dow ...
分类:
其他好文 时间:
2018-02-24 22:03:32
阅读次数:
251
题意:求最长回文子串 这种有专门的O(n)套板子算法,但作为练习还是用后缀数组来解吧 只需把相同的另一个串反接(中间用一个足够小且未出现的字符衔接),然后枚举回文串的中点,不断求解该点往前和往后计算的$LCP$即可 发现模板有个BUG改好了 有个值得注意的地方是回文长度奇偶枚举时的端点选择问题,具体 ...
分类:
编程语言 时间:
2018-02-24 20:50:09
阅读次数:
188
题面 "Bzoj" Sol 刚完品酒大会那道题后再看这道题发现这就是道$SB$题 后缀数组+并查集 按$height$从大到小做 $height$是两个相邻$rank$的后缀的$LCP$ 从大到小,那么每次合并$height$的两边的集合,同时记录答案 两边集合两两配对的$LCP$一定就是这个$he ...
分类:
其他好文 时间:
2018-02-22 19:55:07
阅读次数:
185
题面 "Bzoj4199" Sol 后缀数组 显然的暴力就是求$LCP$+差分 $40$分 cpp include define RG register define IL inline define Fill(a, b) memset(a, b, sizeof(a)) using namespac ...
分类:
其他好文 时间:
2018-02-21 23:35:07
阅读次数:
230
题面 "Bzoj" Sol 两个串拼在一起后求出后缀数组 然后显然的$n^2$暴力,就是直接枚举求$LCP$ 又由于扫的时候是对$height$取$min$ 那么可以用单调栈维护每一段的贡献相同的 ...
分类:
其他好文 时间:
2018-02-21 22:17:00
阅读次数:
171
【BZOJ4566】找相同字符(后缀数组) 题面 "BZOJ" 题解 后缀数组的做法,应该不是很难想 首先看到两个不同的串,当然是接在一起求$SA,height$ 那么,考虑一下暴力 在两个串各枚举一个后缀,他们的$lcp$就是对答案产生的贡献 现在优化一下,按照$SA$的顺序枚举来处理$lcp$ ...
分类:
编程语言 时间:
2018-02-15 11:53:28
阅读次数:
228
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4199 题意: 给你一个长度为n的字符串s,和一个长为n的数组v。 对于每个整数r∈[0,n-1]: (1)问你有多少对后缀(suffix(i), suffix(j)),满足LCP(suffi ...
分类:
编程语言 时间:
2018-02-13 20:32:19
阅读次数:
200
"题目链接" Description 一个长度为$n$的字符串$S$,令$T_i$表示它从第$i$个字符开始的后缀。求$$\sum_{1\leq i\leq j\leq n}len(T_i)+len(T_j) 2 lcp(T_i,T_j)$$其中,$len(a)$表示字符串$a$的长度,$lcp(a ...
分类:
编程语言 时间:
2018-02-12 15:19:07
阅读次数:
221
我们发现要支持修改操作,所以后缀数组就不适用了 查询两个字符串的lcp有两个很常见的算法, 后缀数组和 二分哈希 所以对于字符串的修改我们用一个splay 来维护, 平衡树每个节点表示的是对应子树的字符串的哈希值。 1 #include <iostream> 2 #include <cstdio> ...
分类:
Web程序 时间:
2018-02-10 11:09:48
阅读次数:
175