Description

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

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

Output

  一行一个整数,表示最长双回文子串的长度。
Sample Input

baacaabbacabb

Sample Output

12

HINT

样例说明

  从第二个字符开始的字符串aacaabbacabb可分为aacaa与bbacabb两部分,且两者都是回文串。

数据规模及限制

  对于10%的数据,2≤|S|≤10^3。

  对于30%的数据,2≤|S|≤10^4。

  对于100%的数据,2≤|S|≤10^5。

其实很简单

我们先用manacher算法求出以每个点为中心的最长回文串

然后求出l[i]和r[i],分别表示向前和向后的最远的 回文串能覆盖到i 的中心(当然i是manacher算法里面加入的‘#’)因为只有这个才可以做分割点

  1. const
  2. maxn=;
  3. var
  4. c:array[..maxn]of char;
  5. p,ll,rr:array[..maxn]of longint;
  6. n:longint;
  7.  
  8. function min(x,y:longint):longint;
  9. begin
  10. if x<y then exit(x);
  11. exit(y);
  12. end;
  13.  
  14. function max(x,y:longint):longint;
  15. begin
  16. if x>y then exit(x);
  17. exit(y);
  18. end;
  19.  
  20. procedure init;
  21. var
  22. i,id,r:longint;
  23. begin
  24. n:=;
  25. while not eoln do
  26. begin
  27. inc(n);
  28. read(c[n]);
  29. inc(n);
  30. end;
  31. c[]:='$';
  32. c[n+]:='#';
  33. id:=;
  34. r:=;
  35. for i:= to n do
  36. begin
  37. if r>=i then p[i]:=min(p[id<<-i],r-i+)
  38. else p[i]:=;
  39. while c[i+p[i]]=c[i-p[i]] do
  40. inc(p[i]);
  41. if i+p[i]->r then
  42. begin
  43. id:=i;
  44. r:=i+p[i]-;
  45. end;
  46. end;
  47. end;
  48.  
  49. procedure work;
  50. var
  51. i,k,ans:longint;
  52. begin
  53. k:=;
  54. for i:= to n do
  55. if i and = then
  56. begin
  57. while k+p[k]-<i do
  58. inc(k);
  59. ll[i]:=i-k;
  60. end;
  61. k:=n;
  62. for i:=n downto do
  63. if i and = then
  64. begin
  65. while k-p[k]+>i do
  66. dec(k);
  67. rr[i]:=k-i;
  68. end;
  69. ans:=;
  70. for i:= to n do
  71. if i and = then ans:=max(ans,ll[i]+rr[i]);
  72. writeln(ans);
  73. end;
  74.  
  75. begin
  76. init;
  77. work;
  78. end.

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

  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. HYSBZ 2565 最长双回文串 (回文树)

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

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

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

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

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

  6. bzoj 2565: 最长双回文串

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

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

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

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

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

  9. 【BZOJ】2565: 最长双回文串

    [题意]给定小写字母字符串s,求最长的 [ 可以分成左右两个回文串的 ] 子串,n<=10^5. [算法]回文树 [题解]对于每个字符x,处理出以x结尾的最长回文串,以x开头的最长回文串,然后枚 ...

随机推荐

  1. 解决discuz模板插入jvascript脚本问题(Unexpected token <)

    问题描述: 最近学习discuz中要做一个焦点图,添加一个模板,让其显示后台推送图片,其中模块模板中要用到如下的代码 <div class="wrap"> <di ...

  2. 北大ACM(POJ1003-Hangover)

    Question:http://poj.org/problem?id=1003问题点:水题. Memory: 220K Time: 0MS Language: C++ Result: Accepted ...

  3. VHDL操作运算符的优先级顺序

           

  4. iOS-单例模式-使用技巧

    SingleModel-单例模式 单例可以保证在程序运行过程,一个类只有一个实例(一个对象) 一般将单例设置成宏,这样在使用的时候可以很方便. 我们可以按照下面的步骤实现单例 1.自定义一个.h文件, ...

  5. iOS-NSOperation多线程

    NSOperation 一.简介 1.使用步骤 配合使用NSOperation和NSOperationQueue也能实现多线程编程 先将操作封装到一个NSOperation对象中 然后将NSOpera ...

  6. .NET中导入导出Excel总结

    前一段时间,做了Excle的导入和导出,在此记录开发思路及技术要点,以便在今后开发中参考.                                                        ...

  7. 配置Hibernate二级缓存步骤

    配置Hibernate二级缓存步骤: 加入二级缓存的jar包及配置文件 jar包位置:hibernate-release-4.1.8.Final\lib\optional\ehcache下所有jar包 ...

  8. Android实现Http协议案例

    在Android开发中,使用Http协议实现网络之间的通信是随处可见的,使用http方式主要采用2中请求方式即get和post两种方式. 一.使用get方式: HttpGet httpGet = ne ...

  9. Codevs 1078 ==Poj 1258 Agri-Net

      Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 53270   Accepted: 22140 Description D ...

  10. oracle连接和执行流程总结

    参考关于oracle连接及一个事务的完整流程分析的资料,做整理如下 参考资料: http://blog.csdn.net/wyzxg/archive/2010/08/16/5815335.aspx h ...