A1280. 最长双回文串
时间限制:2.0s   内存限制:512.0MB  
总提交次数:   AC次数:   平均分:
 
将本题分享到:
      
试题来源
  中国国家队清华集训 2011-2012 第二天
问题描述
  顺序和逆序读起来完全一样的串叫做回文串。比如acbca是回文串,而abc不是(abc的顺序为“abc”,逆序为“cba”,不相同)。
  输入长度为n的串S,求S的最长双回文子串T,即可将T分为两部分X,Y,(|X|,|Y|≥1)且X和Y都是回文串。
输入格式
  一行由小写英文字母组成的字符串S。
输出格式
  一行一个整数,表示最长双回文子串的长度。
样例输入
baacaabbacabb
样例输出
12
样例说明
  从第二个字符开始的字符串aacaabbacabb可分为aacaa与bbacabb两部分,且两者都是回文串。
数据规模及限制
  对于10%的数据,2≤|S|≤103
  对于30%的数据,2≤|S|≤104
  对于100%的数据,2≤|S|≤105
  时间限制:2秒
/*
一开始只写了从左到右贪心选取,在青橙上A了,bzoj上wa了
然后又改成了正着一遍,反着一遍,就过了
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 100010
using namespace std;
char s[maxn];
int nxt[maxn][],fail[maxn],len[maxn],str[maxn],sz=-,last,n,a[maxn];
int creat(int l){
len[++sz]=l;return sz;
}
void prepare(){
last=n=;sz=-;
memset(fail,,sizeof(fail));
memset(nxt,,sizeof(nxt));
creat();
creat(-);
str[]=-;
last=;
fail[]=;
}
int getfail(int x){
while(str[n-len[x]-]!=str[n])x=fail[x];
return x;
}
void Insert(int c,int id){
str[++n]=c;
int cur=getfail(last),now;
if(!nxt[cur][c]){
now=creat(len[cur]+);
fail[now]=nxt[getfail(fail[cur])][c];
nxt[cur][c]=now;
}
last=nxt[cur][c];
a[id]=last;
}
int main(){
prepare();
scanf("%s",s);
int l=strlen(s);
for(int i=;i<l;i++)
Insert(s[i]-'a'+,i);
int ans=;
for(int i=;i<l;i++)
ans=max(ans,len[a[i]]+len[a[i-len[a[i]]]]);
prepare();
for(int i=l-;i>=;i--)
Insert(s[i]-'a'+,i);
for(int i=;i<l;i++)
ans=max(ans,len[a[i]]+len[a[i+len[a[i]]]]);
printf("%d",ans);
return ;
}

青橙 A1280. 最长双回文串的更多相关文章

  1. 【Tsinsen】A1280. 最长双回文串

    Bryce1010模板 http://www.tsinsen.com/A1280### 题目分析:记录一个点向后和向前的最长回文串,然后就是max(Llen[i]+Rlen[i+1])了. #incl ...

  2. A1280. 最长双回文串

    学习了回文树,地址:http://blog.csdn.net/u013368721/article/details/42100363: 这个题就是正这反着加一遍就好,一开始我想的是枚举每个位置,然后一 ...

  3. Tsinsen 最长双回文串

    求最长双回文串,正反建回文树求最大. 题目链接:http://www.tsinsen.com/ViewGProblem.page?gpid=A1280 By:大奕哥 #include<bits/ ...

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

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

  5. 【BZOJ2565】最长双回文串(回文树)

    [BZOJ2565]最长双回文串(回文树) 题面 BZOJ 题解 枚举断点\(i\) 显然的,我们要求的就是以\(i\)结尾的最长回文后缀的长度 再加上以\(i+1\)开头的最长回文前缀的长度 至于最 ...

  6. BZOJ.2565.[国家集训队]最长双回文串(Manacher/回文树)

    BZOJ 洛谷 求给定串的最长双回文串. \(n\leq10^5\). Manacher: 记\(R_i\)表示以\(i\)位置为结尾的最长回文串长度,\(L_i\)表示以\(i\)开头的最长回文串长 ...

  7. P4555 [国家集训队]最长双回文串

    P4555 [国家集训队]最长双回文串 manacher 用manacher在处理时顺便把以某点开头/结尾的最长回文串的长度也处理掉. 然后枚举. #include<iostream> # ...

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

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

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

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

随机推荐

  1. (转)详解C#中的反射

    本文转载自:http://blog.csdn.net/educast/article/details/2894892 两个现实中的例子:1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到 ...

  2. web聊天相关知识

    http相关知识 http是无状态,请求,响应模式的通信模式,就是用户每次通过浏览器点击一下页面,都需要重新与web服务器建立一下连接,且发送自己的 session id 给服务器端以使服务器端验证此 ...

  3. ThreadPoolExecutor之一:使用基本介绍

    一.concurrent包中的线程池的简单介绍 线程池按照线程数量可以分为:一是固定线程数量的线程池:二是可变数量的线程池. 线程池按照执行时间可以分为:一是立即执行线程池:二是延时线程池. Thre ...

  4. MySQL 数据库 练习题

    一.表关系 请创建如下表,并创建相关约束 二.操作表 1.自行创建测试数据 2.查询“生物”课程比“物理”课程成绩高的所有学生的学号: 3.查询平均成绩大于60分的同学的学号和平均成绩: 4.查询所有 ...

  5. 第九章 Java中线程池

    Java中的线程池是运用场景最多的并发框架,几乎所有需求异步或并发执行任务的程序都可以使用线程池.在开发过程中,合理地使用线程池能够带来3个好处. 降低资源消耗:通过重复利用已创建的线程降低线程创建和 ...

  6. python 继承进阶

    继承进阶 面向对象 1.类:具有相同属性和方法 的一类事物 类名可以实例化一个对象 类名可以调用类属性,(静态属性 和(方法)动态属性) 2.对象:也就是实例    对象名:调用对象属性 调用方法 3 ...

  7. 类型:JQuery;问题:ajax调用ashx文件;结果:ashx文件怎么获取$.ajax()方法发送的json数据

    ashx文件怎么获取$.ajax()方法发送的json数据 作者:careful 和ajax相关     新浪微博QQ空间QQ微博百度搜藏腾讯朋友QQ收藏百度空间人人网开心网0 $.ajax({  t ...

  8. 部署和调优 2.9 mysql主从配置-3

    测试 先给主mysql解锁 > unlock tables; 删除一个表 > use db1; > show tables; > drop table help_categor ...

  9. schedule与scheduleAtFixedRate比较

    schedule与scheduleAtFixedRate: 不延时: schedule(TimerTask, Date runDate, long period)方法任务不延时----Date类型 i ...

  10. Win10_禁用自动更新(官方版)

    1> win键>输入服务>打开>找到windowsUpdate-->启动类型为-禁用 -->> 恢复失三个选项改为-->>无操作 2>win ...