【题意】给定小写字母字符串s,求最长的 [ 可以分成左右两个回文串的 ] 子串,n<=10^5。

【算法】回文树

【题解】对于每个字符x,处理出以x结尾的最长回文串,以x开头的最长回文串,然后枚举中间点求解。

只须正反用两次回文树就可以处理完毕。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=;
int length,sz,nownode,n,fail[maxn],len[maxn],ch[maxn][],a[maxn],b[maxn];
char s[maxn];
int getfail(int x){while(s[length-len[x]-]!=s[length])x=fail[x];return x;}
void insert(int a[]){
int c=s[++length]-'a';
int x=getfail(nownode);
while(!ch[x][c]){
len[++sz]=len[x]+;
fail[sz]=ch[getfail(fail[x])][c];
ch[x][c]=sz;
}
nownode=ch[x][c];
a[length]=len[nownode];
}
int main(){
scanf("%s",s+);
n=strlen(s+);
len[]=;fail[]=;
len[]=-;fail[]=;
length=;
sz=;//important!
for(int i=;i<=n;i++)insert(a);
len[]=;fail[]=;
len[]=-;fail[]=;
length=;
sz=;//
for(int i=;i<=n/;i++)swap(s[i],s[n-i+]);
for(int i=;i<=n;i++)insert(b);
int ans=;
for(int i=;i<=n;i++)ans=max(ans,a[i]+b[n-i]);
printf("%d",ans);
return ;
}

【BZOJ】2565: 最长双回文串的更多相关文章

  1. BZOJ 2565: 最长双回文串 [Manacher]

    2565: 最长双回文串 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1842  Solved: 935[Submit][Status][Discu ...

  2. bzoj 2565: 最长双回文串 manacher算法

    2565: 最长双回文串 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem. ...

  3. BZOJ 2565 最长双回文串(manacher)

    565: 最长双回文串 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3343  Solved: 1692[Submit][Status][Discu ...

  4. Manacher || P4555 [国家集训队]最长双回文串 || BZOJ 2565: 最长双回文串

    题面:P4555 [国家集训队]最长双回文串 题解:就.就考察马拉车的理解 在原始马拉车的基础上多维护个P[i].Q[i]数组,分别表示以i结尾最长回文子串的长度和以i开头的最长回文子串的长度 然后就 ...

  5. bzoj 2565: 最长双回文串

    Description 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为"abc",逆序为"cba",不相同).输入 ...

  6. bzoj 2565: 最长双回文串 回文自动机

    题目: Description 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为"abc",逆序为"cba",不相同 ...

  7. BZOJ 2565 最长双回文串(回文自动机)

    题意 给一个长度为N的字符串S.对于一个字符串AB,如果A和B都是回文串,那么称AB是一个双回文串.求问S最长双回文子串的长度?N <= 100000 题解 正反双向构造回文自动机,得到某一个点 ...

  8. bzoj 2565: 最长双回文串【manacher+线段树】

    因为我很愚蠢所以用了很愚蠢的O(nlogn)的manacher+线段树做法 就是开两个线段树mn和mx分别表示左端点在i的最长回文子串和右端点在i的最长回文子串 用manacher求出每个点的最长回文 ...

  9. HYSBZ 2565 最长双回文串 (回文树)

    2565: 最长双回文串 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1377  Solved: 714 [Submit][Status][Dis ...

  10. 2565: 最长双回文串 - BZOJ

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

随机推荐

  1. lintcode-422-最后一个单词的长度

    422-最后一个单词的长度 给定一个字符串, 包含大小写字母.空格' ',请返回其最后一个单词的长度. 如果不存在最后一个单词,请返回 0 . 注意事项 一个单词的界定是,由字母组成,但不包含任何的空 ...

  2. Strust2: 工作流程

    以下为Struts2的体系结构图: Struts2框架处理用户请求,大体分为以下几个过程: (1)用户发出一个HttpServletRequest请求 (2)请求经过一系列过滤器,最后达到Filter ...

  3. Spring+Netty4实现的简单通信框架

    参考:http://cpjsjxy.iteye.com/blog/1587601 Spring+Netty4实现的简单通信框架,支持Socket.HTTP.WebSocket_Text.WebSock ...

  4. 《高性能JavaScript》学习笔记——日更中

    ------------------2016-7-20更------------------ 最近在看<高性能JavaScript>一书,里面当中,有讲很多提高js性能的书,正在看的过程中 ...

  5. js动态显示指定的时间

    <p id="timeShow">17:0:50</p> <script> setInterval("time()", 10 ...

  6. javascript与python的比较

    1:javascript与python大小写皆敏感 2:javascript使用{}来组织代码块,与大部分语言相同  python使用缩进来组织代码块,与大部分语言不同,请务必遵守约定俗成的习惯,坚持 ...

  7. 平衡树以及AVL树

    平衡树是计算机科学中的一类数据结构. 平衡树是计算机科学中的一类改进的二叉查找树.一般的二叉查找树的查询复杂度是跟目标结点到树根的距离(即深度)有关,因此当结点的深度普遍较大时,查询的均摊复杂度会上升 ...

  8. 第79天:jQuery事件总结(二)

    上一篇讲到jQuery中的事件,深入学习了加载DOM和事件绑定的相关知识,这篇主要深入讨论jQuery事件中的合成事件.事件冒泡和事件移除等内容. 一.合成事件 jQuery有两个合成事件——hove ...

  9. BZOJ 1237 配对(DP)

    给出两个长度为n的序列.这两个序列的数字可以连边当且仅当它们不同,权值为它们的绝对值,求出这个二分图的最小权值完全匹配.没有输出-1. n<=1e5.用KM会TLE+MLE. 如果连边没有限制的 ...

  10. 【MVVM Dev】ComboBox嵌入CheckBox的显示问题

    一.前言 在ComboBox中嵌入若干个CheckBox时,当我们勾选一些CheckBox,ComboBox会显示相应的勾选项. 例如:CheckBox项有A,B,C   那么勾选这三项,ComboB ...