Manacher算法


  找出一个最长子串S=X+Y,且X和Y都是回文串,求最长的长度是多少……

  同时找两个串明显很难搞啊……但是我们可以先找到所有的回文串!在找回文串的同时我们可以预处理出来l[i]和r[i]分别表示从 i 这个位置开始向左/右最长的回文串有多长,那么我们枚举两个回文串的分割点更新答案即可。

  1. /**************************************************************
  2. Problem: 2565
  3. User: Tunix
  4. Language: C++
  5. Result: Accepted
  6. Time:80 ms
  7. Memory:4496 kb
  8. ****************************************************************/
  9.  
  10. //BZOJ 2565
  11. #include<cstdio>
  12. #include<cstring>
  13. #include<cstdlib>
  14. #include<iostream>
  15. #include<algorithm>
  16. #define rep(i,n) for(int i=0;i<n;++i)
  17. #define F(i,j,n) for(int i=j;i<=n;++i)
  18. #define D(i,j,n) for(int i=j;i>=n;--i)
  19. using namespace std;
  20. typedef long long LL;
  21. inline int getint(){
  22. int r=,v=; char ch=getchar();
  23. for(;!isdigit(ch);ch=getchar()) if(ch=='-')r=-;
  24. for(; isdigit(ch);ch=getchar()) v=v*+ch-'';
  25. return r*v;
  26. }
  27. const int N=1e5+,INF=~0u>>;
  28. /*******************template********************/
  29. char s[N];
  30. int p[N<<],a[N<<],l[N<<],r[N<<],n;
  31. int main(){
  32. scanf("%s",s);
  33. n=strlen(s);
  34. F(i,,n) a[i<<]=s[i-];
  35. n=n<<|;
  36.  
  37. int id=,mx=;
  38. F(i,,n){
  39. if (mx>i) p[i]=min(p[*id-i],mx-i);
  40. while(i-p[i]-> && i+p[i]+<=n && a[i-p[i]-]==a[i+p[i]+]){
  41. p[i]++;
  42. l[i+p[i]]=max(l[i+p[i]],p[i]);
  43. r[i-p[i]]=max(r[i-p[i]],p[i]);
  44. }
  45. if (p[i]+i>mx) mx=p[i]+i,id=i;
  46. l[i+p[i]]=max(l[i+p[i]],p[i]);
  47. r[i-p[i]]=max(r[i-p[i]],p[i]);
  48. }
  49. /*
  50. F(i,1,n) printf("%c ",a[i]!=0?a[i]:'#'); puts("");
  51. F(i,1,n) printf("%d ",p[i]); puts("");
  52. F(i,1,n) printf("%d ",l[i]); puts("");
  53. F(i,1,n) printf("%d ",r[i]); puts("");
  54. */
  55. int ans=;
  56. F(i,,n) if(l[i]+r[i]>ans) ans=l[i]+r[i];
  57. printf("%d\n",ans);
  58. return ;
  59. }

【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. 获取屏幕分辨率(C#)

    C#获取屏幕分辨率的方法 static void Main(string[] args) { // 控制台程序,需要添加程序集: // using System.Drawing; // using S ...

  2. asp.net过滤HTML标签的几个函数

    以下是引用片段: ----- /**/ /// <summary> /// 去除HTML标记 /// </summary> /// <param name="N ...

  3. ERROR 1045 (28000): Access denied for user root@localhost (using password:

    错误描述: Mysql中添加用户之后可能出现登录时提示ERROR 1045 (28000): Access denied for user的错误.删除user.user中值为NULL的,或更新NULL ...

  4. 在 Windows 7 環境安裝 Python 2.6.6

    目前 Python 的最穩定的版本是 2.7.3 及 3.2.3,因為 2.x 與 3.x 語法並不是完全相容,在各版本之間也有些差異,所以建議還是各自安裝需要的版本… 艾小克工作環境是使用 2.6 ...

  5. R语言的日期运算

    写hive SQL查询, 需要从导入的参数, 自动累加日期. 从而实现一个自动的,多个日期的统计过程 R语言的日期运算超级简单. > test<-Sys.Date() > test ...

  6. linux的一点小随笔

    随意写的一些东西,也就为以后自己可能看看... 1.vim安装,sudo apt-get install vim-gtk,于是vim就安装好了.当然在我电脑上还出现了gvim,简单的vim配置(etc ...

  7. python 上下文管理器

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 上下文管理器(context manager)是Python2.5开始支持的一种语 ...

  8. prettyprint

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  9. webpack 学习笔记 01 使用webpack的原因

    本系列文章实际上就是官网文档的翻译加上自己实践过程中的理解. 伴随着websites演化至web apps的过程,有三个现象是很明显的: 页面中有越来越多的Js. 客户端能做的事情越来越多. 越来越少 ...

  10. hdu 2680 Choose the best route

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2680 Choose the best route Description One day , Kiki ...