bzoj2565 最长双回文子串
Description
输入长度为n的串S,求S的最长双回文子串T,即可将T分为两部分X,Y,(|X|,|Y|≥1)且X和Y都是回文串。
Input
一行由小写英文字母组成的字符串S。
Output
#include<cstdio>
#include<cstring>
char s[],s1[];
int p[],p2[];
int rx[];
int lx[];
inline int min(int a,int b){return a<b?a:b;}
inline int maxs(int&a,int b){if(a<b)a=b;}
int main(){
scanf("%s",s1);
int l=strlen(s1);
for(int i=;i<l;i++)s[i+i+]=s1[i];
l+=l;
s[]=;
s[l+]=;
int mx=,id=;
for(int i=;i<=l;i++){
if(i<mx)p[i]=min(p[(id<<)-i],mx-i);
else p[i]=;
maxs(rx[i],);
while(s[i+p[i]]==s[i-p[i]]){
if(i+p[i]<=l)maxs(rx[i+p[i]],p[i]+);
++p[i];
}
if(i+p[i]>mx){
mx=i+p[i];
id=i;
}
}
mx=id=l+;
for(int i=l;i>=;i--){
if(i>mx)p2[i]=min(p2[(id<<)-i],i-mx);
else p2[i]=;
maxs(lx[i],);
while(s[i-p2[i]]==s[i+p2[i]]){
if(i-p2[i]>=)maxs(lx[i-p2[i]],p2[i]+);
++p2[i];
}
if(i-p2[i]<mx){
mx=i-p2[i];
id=i;
}
}
int ans=;
for(int i=;i<l;i+=)maxs(ans,lx[i+]+rx[i-]);
printf("%d",ans);
return ;
}
bzoj2565 最长双回文子串的更多相关文章
- BZOJ2565 最长双回文串 【Manacher】
BZOJ2565 最长双回文串 Description 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为"abc",逆序为"c ...
- BZOJ2565最长双回文串——manacher
题目描述 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为“abc”,逆序为“cba”,不相同).输入长度为n的串S,求S的最长双回文子串T,即可将T分为两 ...
- BZOJ2565:最长双回文串(Manacher)
Description 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为“abc”,逆序为“cba”,不相同). 输入长度为n的串S,求S的最长双回文子串T ...
- p4555&bzoj2565 最长双回文串
传送门(洛谷) 传送门(bzoj) 题目 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为abc,逆序为cba,不相同). 输入长度为 nnn 的串 SSS ...
- BZOJ2565: 最长双回文串(Manacher)
Description 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为“abc”,逆序为“cba”,不相同).输入长度为n的串S,求S的最长双回文子串T, ...
- bzoj2565: 最长双回文串 pam
题意:找一个串中的最长连续两个回文子串长度 题解:建两个回文树,一个正着,一个反着,每次add之后last的长度就是后缀最长的回文串长度,然后两边加一遍即可 /******************** ...
- 2019.03.02 bzoj2565: 最长双回文串(pam)
传送门 题意简述:问最长的由两个回文串连接而成最长字串长度. 思路: 正反串各建一个pampampam然后就完了. 代码: #include<bits/stdc++.h> #define ...
- bzoj千题计划305:bzoj2565: 最长双回文串(回文自动机)
https://www.lydsy.com/JudgeOnline/problem.php?id=2565 正着构造回文自动机 倒过来再构造一个回文自动机 分别求出以位置i开始的和结尾的最长回文串 # ...
- BZOJ2565: 最长双回文串(回文树)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2565 记录一下每个点往前最长延伸位置,正反两遍,枚举分割点. #include<cstr ...
随机推荐
- Vue 组件中 移动 this.$el 的注意事项
比如, mounted () { document.body.appendChild(this.$el); // insertAdjacentElement // insertBefore}, 这几行 ...
- springboot2.0 web 开发标准目录架构
├── clean-run.sh ├── logs/ 日志文件目录 │ ├── sb2-web_test_2018-06-02_0959.0.log │ └── sb2-web_test.log | ...
- selenium(五)伪造浏览器
简介: 这个就比较好玩了,大家还记得以前的QQ小尾巴么?还有百度贴吧的小尾巴,就是那个来自***的iphone7,这个功能. 这个功能是基于浏览器的user-agent功能实现的. 还是httpbin ...
- 《Python》内置方法进阶和常用模块
一:__new__ 在__init__之前,实例化对象的第一步是__new__创建了一个空间 class Foo: def __init__(self): # 初始化方法 print('执行了init ...
- auto类型说明符的注意事项
1.auto类型说明符,是C++11标准下的,它能让编译器自行判断表达式的类型. 2.auto也能在一条语句上声明多个变量,但是,该语句上的多个变量的类型,必须一致. 3.编译器推断出来auto类型可 ...
- DevExpress v17.2新版亮点—WinForms篇(一)
用户界面套包DevExpress v17.2终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.开篇介绍了DevExpress WinForms v17.2 Data Grid Control ...
- 在eclipse中创建web项目(非myeclipse)
如何创建dynamic web project项目 本文的演示是从本地文件创建dynamic web project,从svn检出的同时创建dynamic web project于此类似.我们推荐使用 ...
- Appium 并发测试基于unitest
前言: 在回归测试阶段,UI测试,兼容测试是测试的必要步骤.UI自动化的本身是比较冗余的测试,但是换个角度思考,UI自动化同时连接多台设备,那么在回归测试时,在同一个脚本下产生的测试结果是非常有价值的 ...
- 新手小白Linux(Centos6.5)部署java web项目(总)
一.准备 1.linux centos版本的相关命令操作,千万别找ubuntu的,好多命令都不一样,新手小白我傻傻不知道硬是浪费了一天的时间……(百度百科linux版本了解一下) 2.远程登录: P ...
- Linux下mysql操作
1.linux下MYSQL的启动与访问 http://www.cnblogs.com/hunter007/articles/2251795.html 2.linux下mysql基本的操作 http:/ ...