- 5
- 0
- 约1.63千字
- 约 9页
- 2025-03-21 发布于山东
- 举报
知识精炼(一)
主讲人:邓哲也
Codeforces17E
给出一个字符串s。
求s有多少对相交的回文子串。包含也算作相交。
如babb一共有6对相交的回文子串:
s[1..1]ands[1..3]
s[1..3]ands[2..2]
s[1..3]ands[3..3]
s[1..3]ands[3..4]
s[3..3]ands[3..4]
s[3..4]ands[4..4]
|s|≤2·106
Codeforces17E
统计不相交的回文子串对数。
不相交的回文子串假设端点分别为x1,y1,x2,y2
那么一定有x1=y1x2=y2
我们只要统计出以i为起点的回文串个数st[i],和以i
为终点的回文串个数ed[i]。
然后计算:
ed[][]
==+
Codeforces17E
在使用manacher算法的时候,对每个i都计算出了p[i]
那么我们就要把[i-p[i],i+p[i]]这个极大回文子串对st
和ed的贡献算进去。
对于st:[i-p[i],i]这些点每个位置都要+1
对于ed:[i,i+p[i]]这些点每个位置都要+1
只需要通过差分转化为单点修改即可。
最后用总的回文子串对数减去不相交的回文子串对数即是答案。
BZOJ2565
定义双回文串T,满足存在T=ab,其中a和b都是回
文串。
给定字符串S,求一个S的最长的双回文子串T。
|S|≤106
BZOJ2565
一个简单的想法,我们可以枚举ab中间的分界线。
然后两边分别计算能延伸出去的最长回文子串长度,然后相
加即可。
先考虑如何计算向左延伸的最长回文子串长度,向右的类似。
BZOJ2565
可以发现,向左的最长回文子串一定是manacher算法中
mx第一次覆盖的时候。
证明:设结尾为i的最长回文串的中点为p,半径为R
假设此时mx未覆盖i,那么p+Rmx与mx的定义矛
盾;
假设mx已经覆盖i,覆盖i的时候中点在p,半径为r,
11
若存在p,使得i-pi-p,那么p一定在p之前,而此
22121
时i未被覆盖,矛盾。
BZOJ2565
因此每次更新mx的时候,把mx对应的lmax赋值即可。
时间复杂度O(n)
倒过来就可以求一遍rmax。
最后取lmax[i]+rmax[i+1]的最大值即为答案。
下节课再见
您可能关注的文档
最近下载
- 2016-2023年广安职业技术学院高职单招(英语/数学/语文)笔试历年考点试题库含答案解析.docx VIP
- 支部书记2025年度组织生活会个人对照检查(五个对照).docx VIP
- (完整版)济南大学大学物理2期末考试试题.pdf VIP
- 2016-2023年广州珠江职业技术学院高职单招(英语/数学/语文)笔试历年考点试题库含答案解析.docx VIP
- YST264-2024 高纯铟-报批稿.pdf VIP
- (完整word版)成人学位英语考试大纲词汇表.pdf VIP
- 数据科学导论.pdf VIP
- 2024盐城工业职业技术学院招聘笔试真题及参考答案详解一套.docx VIP
- 2025至2030中国儿童保健品行业细分市场及应用领域与趋势展望研究报告.docx VIP
- 体表静脉留置针静脉输液操作考核评分标准.docx VIP
原创力文档

文档评论(0)