hdu3068马拉车
其实马拉车还真是最好理解的算法(感觉初中的时候好像讲过类似的,但是当时就没有认真听)
没想到一个简单的优化能变成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马拉车相关推荐
- 马拉车(manacher)算法——最长回文(hdu3068)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3068 题目描述: Problem Description 给出一个只由小写英文字符a,b,c...y ...
- HDU3068 最长回文
最长回文 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- P3805 【模板】manacher 算法【马拉车】
快速的求出一个字符串中最长的回文串的长度 https://www.luogu.com.cn/problem/P3805 #include <iostream> #include <c ...
- 1616: 最长回文串(马拉车算法)
1616: 最长回文串 Time Limit: 1 Sec Memory Limit: 128 MB [Submit][Status][Web Board] Description 求一个字符串的最长 ...
- CodeForces - 1326D2 Prefix-Suffix Palindrome (Hard version)(马拉车/回文自动机)
题目链接:点击查看 题目大意:给出一个字符串,求出截取前缀和后缀后拼接而成的最长回文串,前缀和后缀不能相交 题目分析:题意很简单,思路也不难想,读完题后我尝试性的看了看样例,发现前缀和后缀拼接后如果能 ...
- HDU - 5371 Hotaru's problem(马拉车+暴力)
题目链接:点击查看 题目大意:给出n个数组成的数列,现在规定一种结构满足以下条件: 该结构由三个部分组成 第一个部分与第三个部分相等 第一个部分与第二个部分对称 现在问数列中最长的可以组成该结构的字串 ...
- POJ - 3974 Palindrome(二分+哈希/马拉车)
题目链接:点击查看 题目大意:给出一个字符串,求字符串中最长的回文子串,这个字串可以包含主串本身 题目分析:这个题就是之前徐州网络赛的那个回文题目的弱化版..那个题目正解是要用回文自动机,但我不会,当 ...
- mannachar(马拉车)求最长回文子串
mannachar(马拉车)究竟是什么东西呢? 很简单,就是能让你在O(n)的复杂度内求出一个串的最长回文子串.传统的算法复杂度是O(n^2),呐,为什么mannachar能变快呢?因为mannach ...
- kuangbin专题十六 KMP扩展KMP HDU3068 最长回文
给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 回文就是正反读都是一样的字符串,如aba, abba等 Input输入有多组case,不超过120组,每组输入为 ...
最新文章
- 如何编辑PDF文件,PDF编辑器如何使用
- OpsDev是什么?
- bootstrap的一些资源
- Snowball 关系提取,2篇知乎博客
- 马歇尔·赫伯特:人工智能的前沿技术与实例分析
- StemBlock pytorch实现
- PHP date, strtotime, mktime处理
- 618物流压力怎么扛?
- 控制台输出HelloWorld案例
- 统计学习(四):多重检验与控制程序
- 随时发生的网络攻击怎么防?这是一场网络安全的全民保卫战!
- 判断没登录就跳转php,PHP实例:PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)...
- 数学建模——五步方法
- dependency标签
- mysql字段有中文、英文、数字的混合排序
- 【高效工作】Sublime Text 3 美化
- 攻防世界WEB进阶之mfw
- 一个不重复的随机数发生函数
- JavaScript - canvas - 镜像图片
- POJ - 1375