其实马拉车还真是最好理解的算法(感觉初中的时候好像讲过类似的,但是当时就没有认真听)

没想到一个简单的优化能变成O(n),感觉碉堡

不说了,马拉车裸题,我在写的时候只保留了id,没保留mx,希望能形成一种代码习惯吧

 1 #include <cstdio>
 2 int n;char ch;
 3 int p[220002];
 4 char a[220002];
 5 int min(int a,int b){return(a<b)?a:b;}
 6 int max(int a,int b){return(a>b)?a:b;}
 7 int get(int k){return (k&1)?p[k]/2*2:(p[k]+1)/2*2-1;}
 8 void add(int i)
 9 {
10     int u=i-p[i],v=i+p[i];
11     while((a[u]==a[v]) && (u>0) && (v<=n))
12         u--,v++,p[i]++;
13 }
14 int main()
15 {
16     while((ch<'a' || ch>'z')&&(ch!=EOF)) ch=getchar();
17     while(ch!=EOF)
18     {
19         n=1;a[1]='0';
20         for(;ch>='a' && ch<='z';ch=getchar())
21             a[++n]=ch,a[++n]='0';
22         int id=0;
23         for(int i=1;i<=n;i++)
24         {
25             if(i<id+p[id])
26             {
27                 p[i]=min(p[id*2-i],id+p[id]-i);
28                 if(i+p[i]==id+p[id])
29                     add(i);
30             }
31             else
32                 p[i]=1,add(i);
33             if(i+p[i]>p[id]+id)
34                 id=i;
35         }
36         int ans=0;
37         for(int i=1;i<=n;i++)
38             ans=max(ans,get(i));
39         printf("%d\n",ans);
40         while((ch<'a' || ch>'z')&&(ch!=EOF)) ch=getchar();
41     }
42     return 0;
43 }

转载于:https://www.cnblogs.com/wanglichao/p/5798856.html

hdu3068马拉车相关推荐

  1. 马拉车(manacher)算法——最长回文(hdu3068)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3068 题目描述: Problem Description 给出一个只由小写英文字符a,b,c...y ...

  2. HDU3068 最长回文

    最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  3. P3805 【模板】manacher 算法【马拉车】

    快速的求出一个字符串中最长的回文串的长度 https://www.luogu.com.cn/problem/P3805 #include <iostream> #include <c ...

  4. 1616: 最长回文串(马拉车算法)

    1616: 最长回文串 Time Limit: 1 Sec Memory Limit: 128 MB [Submit][Status][Web Board] Description 求一个字符串的最长 ...

  5. CodeForces - 1326D2 Prefix-Suffix Palindrome (Hard version)(马拉车/回文自动机)

    题目链接:点击查看 题目大意:给出一个字符串,求出截取前缀和后缀后拼接而成的最长回文串,前缀和后缀不能相交 题目分析:题意很简单,思路也不难想,读完题后我尝试性的看了看样例,发现前缀和后缀拼接后如果能 ...

  6. HDU - 5371 Hotaru's problem(马拉车+暴力)

    题目链接:点击查看 题目大意:给出n个数组成的数列,现在规定一种结构满足以下条件: 该结构由三个部分组成 第一个部分与第三个部分相等 第一个部分与第二个部分对称 现在问数列中最长的可以组成该结构的字串 ...

  7. POJ - 3974 Palindrome(二分+哈希/马拉车)

    题目链接:点击查看 题目大意:给出一个字符串,求字符串中最长的回文子串,这个字串可以包含主串本身 题目分析:这个题就是之前徐州网络赛的那个回文题目的弱化版..那个题目正解是要用回文自动机,但我不会,当 ...

  8. mannachar(马拉车)求最长回文子串

    mannachar(马拉车)究竟是什么东西呢? 很简单,就是能让你在O(n)的复杂度内求出一个串的最长回文子串.传统的算法复杂度是O(n^2),呐,为什么mannachar能变快呢?因为mannach ...

  9. kuangbin专题十六 KMP扩展KMP HDU3068 最长回文

    给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 回文就是正反读都是一样的字符串,如aba, abba等 Input输入有多组case,不超过120组,每组输入为 ...

最新文章

  1. 如何编辑PDF文件,PDF编辑器如何使用
  2. OpsDev是什么?
  3. bootstrap的一些资源
  4. Snowball 关系提取,2篇知乎博客
  5. 马歇尔·赫伯特:人工智能的前沿技术与实例分析
  6. StemBlock pytorch实现
  7. PHP date, strtotime, mktime处理
  8. 618物流压力怎么扛?
  9. 控制台输出HelloWorld案例
  10. 统计学习(四):多重检验与控制程序
  11. 随时发生的网络攻击怎么防?这是一场网络安全的全民保卫战!
  12. 判断没登录就跳转php,PHP实例:PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)...
  13. 数学建模——五步方法
  14. dependency标签
  15. mysql字段有中文、英文、数字的混合排序
  16. 【高效工作】Sublime Text 3 美化
  17. 攻防世界WEB进阶之mfw
  18. 一个不重复的随机数发生函数
  19. JavaScript - canvas - 镜像图片
  20. POJ - 1375

热门文章

  1. 转正老板让你谈谈你的看法_让我们谈谈逻辑回归
  2. 深入浅出SQL(三)——表的规范化
  3. 贷款审批时,会重点看征信报告哪些内容?
  4. 一个法国摄影师在中国
  5. 鸿蒙系统下拉菜单,鸿蒙的js开发部模式17:鸿蒙的系统能力的应用模块
  6. 【theano-windows】学习笔记七——logistic回归
  7. ubuntu 15.04 下的 nvidia(待续)
  8. 学习数字图像处理经验谈
  9. 高并发大流量专题---6、独立图片服务器的部署
  10. C++之前置自增与后置自增