2021.2.3做题小结

1.3714 后缀数组

题意:求出 SA 数组和 Height 数组

思路:模板题

2.单调栈

题意:求每个数后第一个大于他的数

思路:模板题

3.[AHOI2013]差异

题意:给定一个长度为 n 的字符串 SS,令 T_i 表示它从第 i 个字符开始的后缀。求

其中,len(a) 表示字符串 a 的长度,lcp(a,b) 表示字符串 a 和字符串 b 的最长公共前缀。

思路:

对 ans 进行化简:

需要明确的是 lcp(x,y)=min(height[x...y])

所以先建立字符串的后缀数组。考虑 Height 数组的贡献:Height 数组中 [2, n] 内的每一个区间都给答案贡献区间最小值。

单调栈解决

4.[luogu1886]滑动窗口

题意:长度固定的区间最大/小值

思路:单调队列模板题

5.[POJ3974]Palindrome

题意:求最大回文子串长度

思路:manacher模板题

6.[国家集训队]拉拉队排练

题意:http://fzuoj.xndxfz.com/problem/3465

思路:一个和谐小群体是一个长度为奇数的回文串,所以我们可以用manacher来解决此题

然后因为这个题只需要求出奇数长度的回文串,所以不需要考虑插入字符

注意:1.需要快速幂 2.eg:ababa 回文半径为5 但它也包含了 a bab ababa 即如果一个值为x(x>1)那x-1,x-2.....也存在。所以需要用前缀和统计,用桶存储一下回文半径,倒着搜一遍即可

7. [国家集训队]最长双回文串

题意:求字符串的最长子串SS满足可以分为X,Y,使得X,Y 都是回文串。

思路:manacher 维护最长回文半径 p[i] 的同时,再分别维护以i为结尾的最长回文子串的长度 ll[i],和以 i 为开头的最长回文子串的长度 rr[i]。 ll[i+p[i]−1]=max(ll[i+p[i]−1],p[i]−1) rr[i-p[i]+1]=max(rr[i-p[i]+1],p[i]-1)

注意:manacher 求出的每个l[i]和r[i]都是在i最大的情况下求的,而看到 第6题的注意点2,发现中 间一连串的点没有考虑。枚举每一个‘#’,O(n)递推出每个'#'为断点的 ll[i] 和 rr[i],其中 rr[i] 因为是 i 结尾的回文长度,所以直接顺推,每往后移一位,最长回文子串长度-2。

即rr[i]=max(rr[i],rr[i−2]−2) ll[i]=max(ll[i],ll[i+2]-2),(ll逆推)。

8.[POI2010]Antisymmetry

题意:对于一个0/1序列,求出其中异或意义下回文的子串数量

思路:改变 manacher 匹配条件即可

注意:子串长度为奇数时,不可能满足异或后与原来相同的要求

9.lyndon分解

题意:RT

思路:模板题

posted @ 2021-02-03 21:20  _Famiglistimo  阅读(61)  评论(0编辑  收藏  举报