当前位置: 首页 > news >正文

Manacher 做题记录

CF1827C

此题要求 \(S\) 中美丽子串的数量。考虑枚举每个美丽子串的起始点为 \(i\),因为大回文串可以分解成小回文串,所以提前处理记录以每个点 \(i\) 为起点的最小回文串大小为 \(nxt_i\)。然后以 \(i\) 为起点扩展到 \(i+nxt_i\),然后递归处理到 \(i > n\) 后返回回文串数量 \(Ans_i\) 。答案即为 \(\sum\limits_{i=1}^{n} Ans_i\)。因为最多可能有 \(n^2\) 个美丽子串,所以要记忆化处理保证复杂度为 \(O(n)\)

int dfs(int j){if(j>n*2) return 0;if(ans[j]!=0) return ans[j];ans[j]=dfs(j+nxt[j]+2)+1;return ans[j];
}

nxt数组计算过程:

void manacher(){int l=0,r=-1,cnt=0,sum=0;for(int i=1;i<=2*n;i+=2){if(i>r){for(int j=i;j<=n*2;j++){if(i*2-j<0) break;if(s[i*2-j]==s[j]){nxt[i*2-j]=min(nxt[i*2-j],j*2-i*2);pre[j]=min(pre[j],j*2-i*2);d2[i]=j-i;}else break;}if(i+d2[i]>=r){r=i+d2[i];l=i-d2[i];cnt=i;}}else{d2[i]=min(d2[cnt*2-i],r-i);if(cnt*2-i+1-pre[cnt*2-i+1]>l) nxt[i-1]=min(pre[cnt*2-i+1],nxt[i-1]);int tmp=i+min({d2[i],i-cnt,i-sum}); //复杂度瓶颈,最优性减枝for(int j=i+1;j<=tmp;j+=2){nxt[i*2-j]=pre[cnt*2+j-i*2];pre[j]=nxt[cnt*2-j];}for(int j=i+d2[i];j<=n*2;j++){if(i*2-j<0) break;if(s[i*2-j]==s[j]){nxt[i*2-j]=min(nxt[i*2-j],j*2-i*2);pre[j]=min(pre[j],j*2-i*2);d2[i]=j-i;}else break;}if(d2[i]>=i-cnt) sum=i;if(i+d2[i]>=r){ //复杂度瓶颈,靠更新左端点优化计算r=i+d2[i];l=i-d2[i];cnt=i;}}}
}

整体代码

http://www.sczhlp.com/news/13838/

相关文章:

  • 5.7 文件的修改
  • 2025年8月17日15:31:09
  • 家庭配电箱内的开关有多种类型,每种开关的作用、分类及常见用途都不尽相同。下面是详细的分类说明以及表格化的展示:
  • HS_fu3的语录
  • 在K8S中,外部如何访问集群内的服务?
  • CSP-S模拟13
  • 你好, 再见 ! 董小姐
  • CSP-S2025模拟7-13
  • 模拟费用流入门
  • 合页作为一种常见的连接元件,其发展历程与建筑、家具、机械等领域的需求密切相关。以下是合页发展的时间线,详细说明了其主要的发展阶段:
  • ROS2 学习(一)——节点的概念
  • 关于柜门铰链的发展时间线,它经历了多个阶段的创新与进步,从最早的简单支撑结构到现代智能调节功能的集成。以下是详细的时间线和各阶段的发展说明:
  • Manacher算法实现
  • 题解:P11323 【MX-S7-T1】「SMOI-R2」Happy Card
  • day29大模型程序开发day04-多智能体编排实操(张飞诸葛亮转移智能体)
  • Luogu P13685 【MX-X16-T3】「DLESS-3」XOR and Impossible Problem 题解 [ 黄 ] [ Ad-hoc ] [ 值域分治 ]
  • 在K8S中,镜像下载策略有哪些?
  • 一道题
  • 八代凯美瑞中控usb连接carplay盒子音响有电流滋滋声的解决方案
  • 读书笔记: 数据仓库同步的陷阱与Oracle读一致性的奥秘
  • SDFZ contest 444 题解
  • 设计表 Design table _2 获取单元格内容
  • 最小二乘法计算触摸事件速度
  • Font Awesome 一个基于CSS和LESS的免费图标库工具包 【下载与使用教程】
  • 铝5052、铝6061、铝7075、铝2A12的主要区别表格:
  • 揭秘ChatGPT共享功能重大隐私漏洞的发现与报告过程
  • 红日靶场01
  • ABC 419 E(滑窗同余 + dp)
  • 与配置相关的设计表 Design table
  • 在 Ubuntu 上安装 Jenkins