首页 > 其他分享 >12/23

12/23

时间:2023-12-23 17:33:06浏览次数:30  
标签:12 23 int lt nbsp ans pi 回文

manacher

核心

  • 在 O(n)的时间内,求出一个长度为n的字符串的最长回文子串
  • 过程
  1. 预处理:将 abbacd 变 #a#b#b#a#c#d# 避免偶回文没有回文中心
  2. 中心扩展:枚举每个回文中心位置i,看最多能向两边扩展多少  
  • 将以每个i为回文中心的最大回文半径记为pi
  • 记录x,使得以x为回文中心扩展出去的回文串的右端点最大,记录最右端点R,最左端L 
    • 现在算 pi 有两种情况:

      1. i>R    暴力向两侧扩展
      1. i<=R    进行优化

        因为p;在回文串[L,R]内,所以必有一个和它相同的位置 &nbsp;<span class="math inline">j=x&lt;&lt;1&minus;i,它 它们关于x对称

        由于&nbsp;<span class="math inline">j&lt;i,那么它的&nbsp;<span class="math inline">pj&nbsp;已经计算了

    • 如果以 j&nbsp;为回文中心的回文串不包含&nbsp;<span class="math inline">L<span class="math inline">,那么&nbsp;<span class="math inline">i&nbsp;肯定也扩展不了了。比较j与L的长度和i与R的长度,取较小值,令&nbsp;<span class="math inline">pi=min(pj,R-i+1)

    • 如果以 j&nbsp;为回文中心的回文串包含&nbsp;<span class="math inline">L<span class="math inline">,那么从&nbsp;<span class="math inline">L&nbsp;再向外的那一节&nbsp;<span class="math inline">i&nbsp;就不能适用了。令&nbsp;<span class="math inline">pi=R&minus;i+1&nbsp;后,从&nbsp;<span class="math inline">R&nbsp;开始进行暴力扩展

 

 

模板代码 

 

#include <bits/stdc++.h>
using namespace std;
const int N =1.1e7+5;
int ans,n,len;
int R,x; 
int p[N<<1]; 
char s[N],st[N<<1];

int main()
{
	cin>>(s+1);
	len=strlen(s+1);//从1开始
	st[++n]='#';
	for(int i=1;i<=len;i++) 
	{
		st[++n]=s[i];
		st[++n]='#';
	}//预处理 st为新处理后的序列 
		
	for(int i=1;i<=n;i++)
	{
		if(i>R) 
			p[i]=1;
		else
			p[i]=min(R-i+1,p[(x<<1)-i]); 
		while(i-p[i]>=1&&i+p[i]<=n&&st[i-p[i]]==st[i+p[i]]) 
			p[i]++;//暴力扩展 
		if(i+p[i]-1>R) 
			R=i+p[i]-1,x=i;
		ans=max(ans,p[i]);
	}
	printf("%d",ans-1);
	return 0;
}

 

标签:12,23,int,lt,nbsp,ans,pi,回文
From: https://www.cnblogs.com/blogzy/p/17923351.html

相关文章

  • 按马哥教育关于2023版Linux云计算SRE工程师掌握知识类别,你会了哪些?
    模块1:Linux新手快速基础入门模块2:面试必备-企业级Shell脚本编程实战模块3:Linux系统结构、内核、进程进阶模块4:网络管理管理及互联网通信实战模块5:互联网常见服务应用实战模块6:网络安全、加密及安全通信实战模块7:安全加固内核防火墙Iptables模块8:企业级Web-LA/NMP架......
  • Test20231016
    考得真烂。被初一dalao薄纱。[题面+std](https://www.wenshushu.cn/drive/cfraky1du37)。T1:数学结论题:裴蜀定理,即:$a\timesx+b\timesy=\gcd(a,b)$T2:小清新贪心题,清楚一点性质**从点$i\toj(j>i)$然后又从点$j\tok(j>k)$那么为什么不能从$i$直接到$k$呢?**根据......
  • 12.23模拟赛
    T1正解:莫反推导出来的整除分块,证明不会:然后直接快速幂来算是\(O(\sqrt{m}·log\:n)\)的,过不了剩下三个点。考虑到模数很小且为质数,用费马小定理预处理幂次然后去算,复杂度\(O(\mathbf{10007}·log\:n+\sqrt{m})\),注意字符串处理\(n\)。点击查看代码#include<bits/stdc++.......
  • 2023-12-23训练总结
    T1计数ProblemDescriptionInputOutputSampleInputCopy210SampleOutputCopy90DataConstraint忘记初始化了调了半个小时。维护\(f_{i,0/1}\)表示长度为\(i\),最高位为\(0\)/不为\(0\)的合法方案数。明显有:\[f_{i,0}\getsf_{i-1,1}\\f_{i,1}\g......
  • 2023-12-23:用go语言,一支n个士兵的军队正在趁夜色逃亡,途中遇到一条湍急的大河 敌军在T
    2023-12-23:用go语言,一支n个士兵的军队正在趁夜色逃亡,途中遇到一条湍急的大河敌军在T的时长后到达河面,没到过对岸的士兵都会被消灭现在军队只找到了1只小船,这船最多能同时坐上2个士兵。当1个士兵划船过河,用时为a[i]当2个士兵坐船同时划船过河时,用时为max(a[j],a[i])两士兵中用时最......
  • 2023-12-23:用go语言,一支n个士兵的军队正在趁夜色逃亡,途中遇到一条湍急的大河 敌军在T
    2023-12-23:用go语言,一支n个士兵的军队正在趁夜色逃亡,途中遇到一条湍急的大河敌军在T的时长后到达河面,没到过对岸的士兵都会被消灭现在军队只找到了1只小船,这船最多能同时坐上2个士兵。当1个士兵划船过河,用时为a[i]当2个士兵坐船同时划船过河时,用时为max(a[j],a[i])两士......
  • [CSP-S 2023] 密码锁
    题目描述小Y有一把五个拨圈的密码锁。如图所示,每个拨圈上是从\(0\)到\(9\)的数字。每个拨圈都是从\(0\)到\(9\)的循环,即\(9\)拨动一个位置后可以变成\(0\)或\(8\),因为校园里比较安全,小Y采用的锁车方式是:从正确密码开始,随机转动密码锁仅一次;每次都是以某个幅度......
  • 623. 在二叉树中增加一行(中)
    目录题目题解:BFS题目给定一个二叉树的根root和两个整数val和depth,在给定的深度depth处添加一个值为val的节点行。注意,根节点root位于深度1。加法规则如下:给定整数depth,对于深度为depth-1的每个非空树节点cur,创建两个值为val的树节点作为cur的左......
  • 2023.12.23模拟赛总结
    前言:这次比赛又是tm的AB组一起打,tm的题目怎么一点质量都没有啊,三道简单题+一道模板题,而且模板我还没做过,而且我的一个部分换成那个模板就A了这次300pts,rank3,感觉不太好T1dp,\(f[i][0/1]\)表示i位置填0/1的方案数,直接转移,写高精度T2感觉应该放T4,实际最难首先,我们设跳楼机从0开......
  • 2023-2024-1 20231303 《计算机基础与程序设计》赵泊瑄第十三周学习总结
    2023-2024-120231303《计算机基础与程序设计》赵泊瑄第十三周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里作业要求的链接https://i.cnblogs.com/posts/edit)这个作业的目标总结第十三周学习收获作业正文2023-......