博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 2342: [Shoi2011]双倍回文
阅读量:4460 次
发布时间:2019-06-08

本文共 1122 字,大约阅读时间需要 3 分钟。

2342: [Shoi2011]双倍回文

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 3286  Solved: 1247
[][][]

Description

Input

输入分为两行,第一行为一个整数,表示字符串的长度,第二行有个连续的小写的英文字符,表示字符串的内容。

 

Output

输出文件只有一行,即:输入数据中字符串的最长双倍回文子串的长度,如果双倍回文子串不存在,则输出0。

Sample Input

16
ggabaabaabaaball

Sample Output

12

HINT

 

N<=500000

 

题解:

Manacher+枚举

代码:

 

#include
#include
#include
#define maxn 500009using namespace std;char s[maxn*2],str[maxn*2];int Len[maxn*2],len,n;void getstr(){ int k=0;str[k++]='$'; for(int i=0;i
i)Len[i]=min(Len[2*id-i],mx-i); else Len[i]=1; while(str[i+Len[i]]==str[i-Len[i]]) Len[i]++; if(Len[i]+i>mx)mx=Len[i]+i,id=i; }}int main(){ scanf("%d",&n); scanf("%s",&s);len=n; Manacher();int ans=0; for(int i=1;i<=len;i++){ if(str[i]=='#'&&Len[i]>ans+1) for(int j=((Len[i]-1)/4)*2;j>ans/2;j-=2){ if(Len[i+j]>=j&&Len[i-j]>=j){ ans=max(ans,j*2);break; } } } printf("%d\n",ans); return 0;}

 

 

 

转载于:https://www.cnblogs.com/zzyh/p/7674429.html

你可能感兴趣的文章
"安装程序无法定位现有系统分区" 问题解决
查看>>
.NET中栈和堆的比较
查看>>
【莫队】bzoj 3781,bzoj 2038,bzoj 3289
查看>>
如何优化limit
查看>>
几种常用数据库字段类型查询语句
查看>>
字符全排列
查看>>
提高效率必须改掉的7种习惯
查看>>
Java判断语句中判断条件的执行顺序
查看>>
Windows平台下tomcat+java的web程序持续占cpu问题调试
查看>>
OO第四次博客作业!
查看>>
HDU 吉哥系列故事——完美队形II 騰訊馬拉松初賽第二輪D題
查看>>
c++学习-继承
查看>>
[转]SQL Server 性能调优(io)
查看>>
设计模式学习-每日一记(6.原型模式)
查看>>
不已0开头的数字正则
查看>>
HTML撑起浮动子元素得父元素高度
查看>>
LeetCode--018--四数之和(java)
查看>>
Redis消息队列
查看>>
电商网站架构设计
查看>>
http://jingyan.baidu.com/article/4dc40848e7b69bc8d946f127.html
查看>>