北京day5

字符串

A

一眼 kmp 的形式 , 问题在于"判相等"要如何进行 , 答案在于这个相等可以被判定为离散化数组的相等 , 我们直接记录前缀 rank 就可以了 .

怎么快速算一段的前缀的 rank , 由于这样的每一个元素只会算入/算出一次 , 所以直接开一个树状数组 , 前面走后面扫 .

B

将询问挂在树上,跑一遍dfs。KMP跳fail的均摊复杂度O(n),不均摊可能会假。但由于我们知道border后一半有周期,可以全部跳过,这样复杂度变为O(nlogn)

D

做一个在线的 ACAM , 我们有很多做法 .

做法一 : 由于字符串长度的均摊性质 , 直接根号对于这些长度判一圈就好了 .

做法二 : 按长度根号分治 , 串长小的扔到Trie上 , 串长大的扔去做 kmp , 这样均摊根号

做法三 : 每一个ACAM长度等于前一个时就合并两个 , 这样ACAM个数和大小都是log级别的

J

倒过来插入再取一半 , 这样就转变成一个回文串的问题了 , 就是左端点在最左侧的双回文串 , 由于回文串的性质 , 普通跑一圈算左/右的最长串就可以了 .

L

假设我们把一个空隙 (i,i+1) 看做一个点,对于一个偶回文子串 s[l:r],在点 l−1,r 之间连一条无向边。那么一个子串的优美,当且仅当存在一条链接 l-1 至 r 的路径。

现在问题在于怎么快速做区间连边 , 这个同我们前几天做的某一道倍增维护并查集

小trick

由于字符串经常有那种长度的和 , 这种不同的长度数量可以均摊根号 .

posted @ 2025-12-17 22:01  2019yyy  阅读(6)  评论(0)    收藏  举报