博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ2342 Shoi2011 双倍回文 【Manacher】
阅读量:4945 次
发布时间:2019-06-11

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

BZOJ2342 Shoi2011 双倍回文


Description

这里写图片描述

Input

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

Output

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

Sample Input

16

ggabaabaabaaball

Sample Output

12

HINT

N<=500000


Manacher板子处理出来p数组后转化成原来串中的g数组(缩小数据规模),然后对于每个中心节点t如果两边是相等的回文串,长度为4*r,则节点t,t-j,t+j的g值都需要大于等于r,枚举所有可能的半径长度比较得到答案


#include
using namespace std;#define N 500010char t[N],s[N<<1];int n=0,len;int p[N<<1],g[N<<1];void Manacher(){ int pos=0,x=0,id=0; for(int i=1;i
i)x=min(p[id*2-i],pos-i+1); else x=0; while(s[i-x]==s[i+x])x++; x--; if(i+x>pos)pos=i+x,id=i; p[i]=x; }}int main(){ scanf("%d%s",&len,t); s[0]='!'; for(int i=0;i
ans;j--) if(g[i+j]>=j&&g[i-j]>=j)ans=max(ans,4*j); printf("%d",ans); return 0;}

转载于:https://www.cnblogs.com/dream-maker-yk/p/9676361.html

你可能感兴趣的文章
outlook 设置163邮箱
查看>>
mysql优化——show processlist命令详解
查看>>
Solr服务器搭建
查看>>
画世界怎么用光影_世界绘画经典教程:水彩光影魔法教程
查看>>
win+rsync+php,跨平台的fswatch+rsync同步备份
查看>>
vue2 cdn 加载html,vue项目中使用CDN加载
查看>>
github.com访问慢解决
查看>>
转:哈夫曼树详解
查看>>
.Net Core Identity外面使用Cookie中间件
查看>>
C#中泛型之Dictionary
查看>>
Codeforces Round #376 (Div. 2)
查看>>
Codeforces 607D Power Tree 线段树 (看题解)
查看>>
写在人生的路上——2016年上半年总结
查看>>
C语言、C语言的起源以及类似C语言的编程语言的历史简直不要太漫长,我简单总结列表如下:...
查看>>
sp1.3-1.4 Neural Networks and Deep Learning
查看>>
SQL 将一个表中的所有记录插入到一个临时表中
查看>>
nmea协议
查看>>
js 中对象的特性
查看>>
hdoj3714【三分】
查看>>
嵌入式开发入门(4)—驱动入门之时序图分析【20121211修改,未完】
查看>>