Description

顺序和逆序读起来完全一样的串叫做回文串。比如acbca是回文串,而abc不是(abc的顺序为“abc”,逆序为“cba”,不相同)。
输入长度为n的串S,求S的最长双回文子串T,即可将T分为两部分X,Y,(|X|,|Y|≥1)且X和Y都是回文串。

Input

一行由小写英文字母组成的字符串S。

Output

一行一个整数,表示最长双回文子串的长度。
 正反各运行一次manacher,同时求出以某个位置为左/右边界的最长回文串长度,最后扫描一次每个分界点取最大值。
#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 最长双回文子串的更多相关文章

  1. BZOJ2565 最长双回文串 【Manacher】

    BZOJ2565 最长双回文串 Description 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为"abc",逆序为"c ...

  2. BZOJ2565最长双回文串——manacher

    题目描述 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为“abc”,逆序为“cba”,不相同).输入长度为n的串S,求S的最长双回文子串T,即可将T分为两 ...

  3. BZOJ2565:最长双回文串(Manacher)

    Description 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为“abc”,逆序为“cba”,不相同). 输入长度为n的串S,求S的最长双回文子串T ...

  4. p4555&bzoj2565 最长双回文串

    传送门(洛谷) 传送门(bzoj) 题目 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为abc,逆序为cba,不相同). 输入长度为 nnn 的串 SSS ...

  5. BZOJ2565: 最长双回文串(Manacher)

    Description 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为“abc”,逆序为“cba”,不相同).输入长度为n的串S,求S的最长双回文子串T, ...

  6. bzoj2565: 最长双回文串 pam

    题意:找一个串中的最长连续两个回文子串长度 题解:建两个回文树,一个正着,一个反着,每次add之后last的长度就是后缀最长的回文串长度,然后两边加一遍即可 /******************** ...

  7. 2019.03.02 bzoj2565: 最长双回文串(pam)

    传送门 题意简述:问最长的由两个回文串连接而成最长字串长度. 思路: 正反串各建一个pampampam然后就完了. 代码: #include<bits/stdc++.h> #define ...

  8. bzoj千题计划305:bzoj2565: 最长双回文串(回文自动机)

    https://www.lydsy.com/JudgeOnline/problem.php?id=2565 正着构造回文自动机 倒过来再构造一个回文自动机 分别求出以位置i开始的和结尾的最长回文串 # ...

  9. BZOJ2565: 最长双回文串(回文树)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2565 记录一下每个点往前最长延伸位置,正反两遍,枚举分割点. #include<cstr ...

随机推荐

  1. oracleXE默认的管理员登录用户

    管理员: account:sys@XE as sysdba     pwd:sys sys@XE as sysdba             system

  2. Python Django 之 Views HttpRequest HttpReponse

    一.Python Django 之 Views 数据交互 http请求中产生两个人核心对象: http请求:HttpRequest对象 http响应:HttpReponse对象 所在位置django. ...

  3. celery(一)分布式任务调度模块简介及运行环境

    Celery是Python开发的分布式任务调度模块. Celery本身不含消息服务,它使用第三方消息服务来传递任务. django下有个分支Django-Celery,可以结合django来实现任务的 ...

  4. CentOS 7 Crontab

    Crontab默认每分钟读取 /etc/crontab 文件./etc/cron.d/目录和/var/spool/cron/目录一次,3者对应任务的建立格式是一致的,只是/var/spool/cron ...

  5. float、clear、overflow

    浮动: float:  none|left|right 作用使得标签失去块级标签的独占一行效果,向某个方向靠拢 标签浮动了,也需要占地方,有时候出现未浮动的div覆盖部分浮动div是浏览器的bug情况 ...

  6. RSA签名验证无法通过,检查以下部分

    RSA签名验证无法通过,检查以下部分:1.是否和上游交换公钥,提交给上游的公钥是否配置正确并生效2.检查加密方式是SHA1还是MD5,是否跟上游一致3.上游采用的是否是base64SafeUrl的方式 ...

  7. 如何编写Makefile,一份由浅入深的Makefile全攻略

    本文转载整理自陈浩大大的文章(跟我一起写 Makefile),由于原文内容庞大,故梳理出目录结构以便于学习及查阅参考. 一.概述 —— 什么是makefile?或许很多Winodws的程序员都不知道这 ...

  8. LG2521 [HAOI2011]防线修建

    题意 题目描述 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可是A国上层现在还犹豫不决,到底该把哪些城市作为保护对象呢? ...

  9. MySQL--修改MySQL账号密码

    ##使用mysqladmin进行修改 mysqladmin -u username -h hostname password 'new password'; ##使用set命令进行修改 SET PAS ...

  10. MySQL--忘记MYSQL管理员密码

    如root用户密码,可以按照以下方式来修改: STEP1: 停止MySQL服务 ps -ef | grep -v 'grep' | grep 'mysqld' | awk '{print $2}' | ...