马拉车算法O(n)可解。

  1. /* 3068 */
  2. #include <iostream>
  3. #include <string>
  4. #include <map>
  5. #include <queue>
  6. #include <set>
  7. #include <stack>
  8. #include <vector>
  9. #include <deque>
  10. #include <algorithm>
  11. #include <cstdio>
  12. #include <cmath>
  13. #include <ctime>
  14. #include <cstring>
  15. #include <climits>
  16. #include <cctype>
  17. #include <cassert>
  18. #include <functional>
  19. using namespace std;
  20. //#pragma comment(linker,"/STACK:102400000,1024000")
  21.  
  22. #define sti set<int>
  23. #define stpii set<pair<int, int> >
  24. #define mpii map<int,int>
  25. #define vi vector<int>
  26. #define pii pair<int,int>
  27. #define vpii vector<pair<int,int> >
  28. #define rep(i, a, n) for (int i=a;i<n;++i)
  29. #define per(i, a, n) for (int i=n-1;i>=a;--i)
  30. #define clr clear
  31. #define pb push_back
  32. #define mp make_pair
  33. #define fir first
  34. #define sec second
  35. #define all(x) (x).begin(),(x).end()
  36. #define SZ(x) ((int)(x).size())
  37. #define lson l, mid, rt<<1
  38. #define rson mid+1, r, rt<<1|1
  39.  
  40. const int maxn = ;
  41. char s[maxn*], ss[maxn];
  42. int P[maxn*];
  43. int ans, l;
  44.  
  45. void init() {
  46. int i, len = strlen(ss);
  47.  
  48. l = ;
  49. s[l++] = '@';
  50. s[l++] = '#';
  51. for (i=; i<len; ++i) {
  52. s[l++] = ss[i];
  53. s[l++] = '#';
  54. }
  55. s[l++] = '\0';
  56. }
  57.  
  58. void manacher() {
  59. int i, mx = , id;
  60.  
  61. for (i=; i<l; ++i) {
  62. P[i] = mx>i ? min(P[*id-i], mx-i) : ;
  63. while (s[i+P[i]] == s[i-P[i]])
  64. ++P[i];
  65. if (i+P[i] > mx) {
  66. mx = i + P[i];
  67. id = i;
  68. }
  69. }
  70.  
  71. ans = ;
  72. for (i=; i<l; ++i)
  73. ans = max(ans, P[i]);
  74. printf("%d\n", ans-);
  75. }
  76.  
  77. void solve() {
  78. init();
  79. manacher();
  80. }
  81.  
  82. int main() {
  83. ios::sync_with_stdio(false);
  84. #ifndef ONLINE_JUDGE
  85. freopen("data.in", "r", stdin);
  86. freopen("data.out", "w", stdout);
  87. #endif
  88.  
  89. while (scanf("%s", ss)!=EOF) {
  90. solve();
  91. }
  92.  
  93. #ifndef ONLINE_JUDGE
  94. printf("time = %d.\n", (int)clock());
  95. #endif
  96.  
  97. return ;
  98. }

【HDOJ】3068 最长回文的更多相关文章

  1. Manacher HDOJ 3068 最长回文

    题目传送门 关于求解最长回文子串,有dp做法,也有同样n^2的但只用O(1)的空间,还有KMP,后缀数组?? int main(void) { ) == ) { ); memset (dp, fals ...

  2. hdu 3068 最长回文 manacher算法(视频)

    感悟: 首先我要Orz一下qsc,我在网上很难找到关于acm的教学视频,但偶然发现了这个,感觉做的很好,链接:戳戳戳 感觉这种花费自己时间去教别人的人真的很伟大. manacher算法把所有的回文都变 ...

  3. hdu 3068 最长回文(manachar求最长回文子串)

    题目连接:hdu 3068 最长回文 解题思路:通过manachar算法求最长回文子串,如果用遍历的话绝对超时. #include <stdio.h> #include <strin ...

  4. HDU - 3068 最长回文(manacher)

    HDU - 3068 最长回文 Time Limit: 2000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Subm ...

  5. hdu 3068 最长回文 manacher

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3068 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.回文就是正 ...

  6. hdu 3068 最长回文_Manacher模板

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/neng18/article/details/24269469 pid=3068" rel= ...

  7. hdu 3068 最长回文 (Manacher算法求最长回文串)

    参考博客:Manacher算法--O(n)回文子串算法 - xuanflyer - 博客频道 - CSDN.NET 从队友那里听来的一个算法,O(N)求得每个中心延伸的回文长度.这个算法好像比较偏门, ...

  8. hdu 3068最长回文

    使用o(n)的manacher算法,详见代码 #include<cstdio> #include<iostream> #include<algorithm> #in ...

  9. HDU 3068 最长回文 【最长回文子串】

    和上一题一样,不过这题只是要求最长回文子串的长度 在此采用了非常好用的Manacher算法 据说还是O(n) 的效率QAQ 详细用法参考了上篇博客的参考资料,这两天有空学习一下~ Source cod ...

  10. hdu 3068 最长回文(manachar模板)

    Problem Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.回文就是正反读都是一样的字符串,如aba, abba等   Input 输 ...

随机推荐

  1. XML序列化/反序列化数据库形式保存和读取。

    直接上码: 首先创建class1类 public class Class1 { public string name { get; set; } public int age { get; set; ...

  2. Linq语法

    希望能帮助一些linq新手. 开门见山 读这篇文章之前,我先说下,每一种搜索结果集,我都以三种方式变现出来,为啦更好的理解,希望不要嫌我啰嗦. 1.简单的linq语法 //1 var ss = fro ...

  3. OS X环境下SVN回滚工程到指定版本,回滚指定文件到指定版本

    1.打开命令行终端 2.cd + 工程或文件目录 3.svn update 工程目录或文件目录 -r 版本号 在Xcode中选中文件,右键选择''show in finder''(也可以用快捷键,不过 ...

  4. ASP.NET设计模式(一)、适配器模式、依赖注入依赖倒置、空对象模式

    鸟随凤鸾,人伴贤良,得以共之,我之幸也.说的是鸟随着鸾凤可以飞的更高远,人和比自己境界高的相处,自己也会得到熏染进步. 一.概述 分享出来简单的心得,望探讨 依赖倒置 依赖注入 Adapter模式 N ...

  5. ASP.NET中Json的处理

    要使用.NET自带的JSON处理工具需要引用下面的命名空间: using System.Web.Script.Serialization; 1.编码 myConfig mc = new myConfi ...

  6. linux下多线程踩过的坑(不定更新)

    1,多线程下整个进程的退出 <<APUE>>关于进程环境一章中指出了进程退出的8个条件: ... (4)最后一个线程从启动例程中返回 (5)最后一个线程调用pthread_ex ...

  7. open()函数

    STDOUT_FILENO            1 标准输入 STDIN_FILENO             0 标准输出 STDERR_FILENO         2 标准错误 在/proc目 ...

  8. word中几个好用的宏代码(立方米上标、关闭样式自动更新、删除无效样式、表格加粗边框、宋体引号)

    Sub 替换立方米() With Selection.Find .Text = "m3" .Replacement.Text = "mm3" .Forward ...

  9. TDirectory.IsRelativePath是否相对路径

    使用函数: System.IOUtils.TDirectory.IsRelativePath class function IsRelativePath(const Path: string): Bo ...

  10. 开源搜索引擎Sphinx 中启动多个搜索进程的方法

    http://blog.163.com/yang_jianli/blog/static/1619900062010316504471/ 要在同一机器上启动多个sphinx搜索进程searchd,必须为 ...