P4555 [国家集训队] 最长双回文串 踢姐

news/2025/11/22 15:51:51/文章来源:https://www.cnblogs.com/WavePath/p/19256943

P4555 [国家集训队] 最长双回文串 踢姐

简要题意:

给定一个字符串 \(S\) ,我们定义字符串 \(T\) 的双回文子串为:存在两个字符串 \(X\)\(Y\)\(T\) 的非空子串,满足 \(X\)\(Y\) 无重叠部分并且两个字符串均为回文串,求给定字符串中出现的最长双回文子串长度。

思路分析:

我们发现很难直接确立最终分割点,我们观察可得对于字符串 \(S\) 中的一个分割点可以确立唯一最大长度,故我们尝试对每一个分割点求出答案,即找到分割点 \(i\) 左右两侧的回文串里,左右边界恰好抵达点 \(i\) 的长度尽可能大的回文串的长度加和,接下来便可以使用Manacher直接求出每一个回文中心可以拓展出的最大回文串长度 \(p_i\) ,记录对于回文中心 \(i\) 拓展出的最大回文串的左右边界到了哪里,并记录对于以 \(i\) 为回文中心扩展得到的最长回文串左右边界到达的分割点,我们开两个数组 \(lc_i\)\(rc_i\) 分别记录左/右边界到达分割点 \(i\) 的回文串的回文中心编号,我们自然希望对于某个分割点,其左/右侧拼接的回文串尽可能长,那么对于两个回文串左边界都到达了 \(i\) 时,我们贪心的选取编号更大的,因为回文中心距离更远,故这个回文串更长,反之同理。

此时我们会发现一些问题,对于如下样例:

baacaabbacabb

我们会发现我们匹配得到的结果是 baacaab + bb ,很玄幻,我们期望是匹配到 baacaab + bacab 或者 aacaa + bbacabb ,但是很显然我们没有匹配到,我们的贪心思路并没有问题,此时我们发现对于该字符串的回文子串 baacaab ,按照我们的思路会拓展 \(lc_1\)\(rc_{15}\)bbacabb 会拓展 \(lc_{13}\)\(rc_{27}\) ,而 aacaa 理应拓展 \(lc_3\)\(rc_{13}\) ,但我们输出 \(lc_3\) 发现如下结果:

4

说明 \(lc_3\) 在程序里只能由 a 得到,我们发现,按照我们的思路,我们会拓展对于回文中心 \(i\) 构成的最长回文串的左右边界,但并没有拓展以 \(i\) 作回文中心可以构成的其他回文串,依据我们在 P1659 [国家集训队] 拉拉队排练 踢姐 中得到的结论,即每一个以 \(i\) 为回文中心的最长回文串一定包含 \(\lceil \frac{p_i}{2} \rceil\) 个回文子串,由回文的性质可得,回文子串的左右边界一定是 \([x+c:y-c]\) ,长度一定是 \(p_i-2c\) ,且一定没有除了以 \(i\) 为回文中心的最长回文串包含的回文串以外更多的回文串,故我们也需要更新以 \(i\) 为回文中心的最长回文串包含的所有回文子串的左右边界到达的分割点数组,不难发现这个时间接近 \(\text O(n^2)\) ,我们考虑优化。

我们考虑在记录编号时,对于 \(lc\) 是越大越好,\(rc\) 是越小越好,并且对于每一次更新,我们只更新 \(lc\)\([i-p_i+1,i]\)\(rc\)\([i,i+p_i-1]\) ,并且只用取最大最小值,我们直接使用线段树维护(其实完全有前缀和思想的线性解法,不过我没想出来导致复杂度得带一个 \(\text{log}\) ,这里且算是提供一个次优解)即可。

代码实现:

Manacher得到 \(p_i\) 后,我们写两个线段树分别维护区间最大值与区间最小值,支持区间修改与单点查询,每次修改我们需要的区间,并在枚举分割点的时候单点查询出枚举到的分割点的值,最后求出答案即可。

🐎:

struct Seg{//线段树实现,这里略#define ls (u<<1)#define rs (u<<1|1)int tr[__],tag[__]; // t=0 max | t=1 mininline void rebuild(int n,int t){...}inline void pushup(int u,int t){...}void build(int u,int l,int r,int t){...}inline void pushdown(int u,int t){...}void update(int u,int l,int r,int lt,int rt,int x,int t){...}int query(int u,int l,int r,int id,int t){...}
}lc,rc;
signed main(){#ifdef Zyhxfreopen("hack.in","r",stdin);#endifios::sync_with_stdio(0),cin.tie(0);int i,j,k,l,r,x,y,z; n=5; x=1;cin>>g;l=strlen(g); s[0]='#',s[n=1]='|';for(i=0;i<l;++i) s[++n]=g[i],s[++n]='|'; s[++n]='$';lc.rebuild(n,0),rc.rebuild(n,1);// 这里是初始化taglc.build(1,1,n,0),rc.build(1,1,n,1);for(i=2;i<n;++i){if(i<=rt) p[i]=min(p[(md<<1)-i],rt-i+1); else p[i]=1;for(;i+p[i]<=n&&i+p[i]>=0&&s[i+p[i]]==s[i-p[i]];++p[i]);if(i+p[i]>rt) rt=i+p[i]-1,md=i;lc.update(1,1,n,i-p[i]+1,i,i,0);rc.update(1,1,n,i,i+p[i]-1,i,1);}for(i=3;i<n-1;i+=2){x=lc.query(1,1,n,i,0),y=rc.query(1,1,n,i,1);if(x!=0&&y!=inf&&x-i+i-y>ans) ans=x-i+i-y;}cout<<ans<<endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/973184.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年水肥一体机制造厂权威推荐榜单:便携式水肥一体机/全自动喷淋系统/简易水肥一体源头厂家精选

随着智慧农业的快速推进,水肥一体化技术正成为现代农业生产的关键支撑。据行业数据显示,水肥一体化设备可有效提高水肥利用率30%以上,成为推动农业现代化转型的核心装备。 水肥一体化技术通过集成灌溉与施肥系统,实…

Java—抽象类 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

23207225-华辉-第一次blog作业

一. 前言 在完成三次大作业的题集后,我兴高采烈地写下写下这片博客,思考人生的意义,也想和大家分享我在这三次大作业中碰见的问题和个人所得。代码为什么错了?错在哪?该如何才能通过题目的测试点?相信很多同学和…

英语_阅读_AI models_待读

When an artificial intelligence model is created, it doesnt have any knowledge. 当一个人工智能模型被创造出来时,它本身并不具备任何知识。 AI companies like OpenAI teach it different things so that it wo…

11.22组会

11.22组会亚克隆文献讲解 使用好ai是第一重要的 gemini最新版 结合ai搭建工具链 使用可以跨平台共享数据的工具,否则已经落后

2025年食品厂生产用水紫外线消毒设备优质厂家权威推荐榜单:牛奶厂紫外线消毒设备/饮料杀菌紫外线消毒设备/啤酒生产紫外线消毒设备源头厂家精选

在食品安全标准日益严格的今天,紫外线消毒技术凭借其高效灭菌、无化学残留的独特优势,正成为食品生产用水处理的核心环节。 根据全球水处理研究报告显示,紫外线消毒设备在食品饮料行业的应用正快速增长。2025年食品…

2025年福建钨钢棒回收公司权威推荐榜单:福州钨钢合金回收/福建钨钢模具回收/福建钨钢块回收服务商精选

在资源循环利用与绿色制造理念深入人心的背景下,钨钢棒回收作为硬质合金资源再利用的关键环节,其专业化水平直接关系到资源利用效率与企业环保合规。 钨钢棒作为一种高价值硬质合金材料,因其高硬度、耐磨性和耐高温…

扩展RTCM消息 - 教程

扩展RTCM消息 - 教程2025-11-22 15:42 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-f…

java.nio.charset.MalformedInputException: Input length = 1

一 背景 启动nacos微服务报如下错误,检查xml文件,未发现问题,经确定是格式问题 二 解决 java -Dfile.encoding=utf-8 启动项,设置编码格式

线段树问题-从熟练到精通

前言 不是每一个文章都要有前言 但是我的有

完整教程:Flowable工作流引擎:核心表结构概述

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年粗糙轮廓仪厂家权威推荐榜单:轮廓仪/表面轮廓仪/粗糙度轮廓仪源头厂家精选

在制造业迈向精密化与智能化的今天,粗糙轮廓仪以其纳米级的检测精度和广泛的应用领域,已成为质量控制环节不可或缺的设备。 据行业研究报告显示,全球表面粗糙度轮廓仪市场在近年来保持稳定发展态势。预计到2031年,…

使用java实验电梯调度算法

1、前言: 电梯控制系统三次题目集均围绕 Java 实现电梯请求处理与调度逻辑展开,难度逐步递增:第一次搭建基础框架,涉及抽象类、枚举、队列等知识点,6 个组件完成基础运行任务,难度简单,核心是理解同向优先的队头…

2025年刮板蒸发器定做厂家权威推荐榜单:刮板薄膜蒸发器/薄膜蒸发器/刮板式蒸发器装备源头厂家精选

在高浓度、高粘度及热敏性物料的蒸发浓缩领域,刮板蒸发器凭借其独特的传热效率和分离效果,正成为化工、制药、食品等行业的核心设备。 刮板蒸发器通过高速旋转的刮板将物料在加热壁面上刮成薄膜,显著增大传热面积,…

单部电梯调度程序三次迭代设计与实践总结 - 23207231

一、前言 本次共完成三次题目集训练,核心围绕 “单部电梯调度程序” 的迭代开发展开,辅以基础语法与逻辑验证类题目,整体呈现递进式训练节奏。以下从知识点覆盖、题量分布与难度梯度三方面进行总结: (一)知识点覆…

格路计数的一类(降维?)技巧

模拟赛考到了,记录一下。 题面: 给你二维平面上 \(n\) 个点,定义移动:$(x,y) \to (x+1,y) / (x-1,y) / (x,y+1) / (x,y-1) $(一个点可以移动到上下左右与这个点相邻的点)。移动每个点 \(m\) 次,使得最后这些点的…

百度PaddleOCR-VL:基于0.9B超紧凑视觉语言模型,支持109种语言,性能超越GPT-4o等大模型 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

hadoop处理mysql数据的性能瓶颈

Hadoop处理MySQL数据时可能会遇到多个性能瓶颈,主要包括以下几个方面:数据导入速度慢:将MySQL中的数据导入Hadoop需要经过抽取、转换和装载(ETL)的过程。如果数据量较大,ETL过程可能会耗费较长时间,导致性能瓶颈…

hadoop在linux的安装

在 Linux 系统上安装 Hadoop 需要以下几个步骤:一、系统环境准备确保你的 Linux 系统满足以下要求:Linux 发行版:如 Ubuntu 20.04 LTS、CentOS 7/8、Debian 11 等。Java:Hadoop 需要 Java 8 或更高版本。磁盘空间:…

hadoop与mysql的综合应用解决方案

Hadoop与MySQL的综合应用解决方案通常涉及大数据处理与关系型数据库的整合。以下是一个综合应用解决方案的概述: 1. 数据存储层Hadoop HDFS:用于存储海量非结构化数据,如日志文件、图像、视频等。HDFS具有高容错性和…