hdu3068马拉车
其实马拉车还真是最好理解的算法(感觉初中的时候好像讲过类似的,但是当时就没有认真听)
没想到一个简单的优化能变成O(n),感觉碉堡
不说了,马拉车裸题,我在写的时候只保留了id,没保留mx,希望能形成一种代码习惯吧
#include <cstdio>
int n;char ch;
int p[];
char a[];
int min(int a,int b){return(a<b)?a:b;}
int max(int a,int b){return(a>b)?a:b;}
int get(int k){return (k&)?p[k]/*:(p[k]+)/*-;}
void add(int i)
{
int u=i-p[i],v=i+p[i];
while((a[u]==a[v]) && (u>) && (v<=n))
u--,v++,p[i]++;
}
int main()
{
while((ch<'a' || ch>'z')&&(ch!=EOF)) ch=getchar();
while(ch!=EOF)
{
n=;a[]='';
for(;ch>='a' && ch<='z';ch=getchar())
a[++n]=ch,a[++n]='';
int id=;
for(int i=;i<=n;i++)
{
if(i<id+p[id])
{
p[i]=min(p[id*-i],id+p[id]-i);
if(i+p[i]==id+p[id])
add(i);
}
else
p[i]=,add(i);
if(i+p[i]>p[id]+id)
id=i;
}
int ans=;
for(int i=;i<=n;i++)
ans=max(ans,get(i));
printf("%d\n",ans);
while((ch<'a' || ch>'z')&&(ch!=EOF)) ch=getchar();
}
return ;
}
hdu3068马拉车的更多相关文章
- hdu3068 最长回文 马拉车模板题
题目传送门 马拉车算法模板题. 学习博客 #include<bits/stdc++.h> #define clr(a,b) memset(a,b,sizeof(a)) using name ...
- HDU3068 最长回文 Manacher's Algorithm 马拉车算法 模板
HDU3068 复习了一下这个算法, 注意数组大小要开两倍大. #include <algorithm> #include <iterator> #include <io ...
- bzoj2342还是马拉车
就好比第一次写主席树的时候写了30行,第二次写了5行 这次马拉车只剩下 ,id=,mx=;i<=n;i++) { -i],mx-i):;a[i-p[i]]==a[i+p[i]+];p[i]++) ...
- Manacher's Algorithm 马拉车算法
这个马拉车算法Manacher‘s Algorithm是用来查找一个字符串的最长回文子串的线性方法,由一个叫Manacher的人在1975年发明的,这个方法的最大贡献是在于将时间复杂度提升到了线性,这 ...
- hdu 3068 最长回文子串 马拉车模板
前几天用后缀数组写过一次这题,毫无疑问很感人的TLE了-_-|| 今天偶然发现了马拉车模板,O(N)时间就搞定 reference:http://acm.uestc.edu.cn/bbs/read.p ...
- 字符串(马拉车算法,后缀数组,稀疏表):BZOJ 3676 [Apio2014]回文串
Description 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最 大出现值. Input 输入只有一行 ...
- Manacher马拉车
俗话说:摩托再好,不如骡拉啊(好像不是骡) Manacher就是O(N)计算最长回文子串的算法. 其中我们需要在0位置加入字符“$",然后原字符串中每两个字符加入一个"#" ...
- hdu3068之manacher算法+详解
最长回文 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 51nod 1595 回文度 | 马拉车Manacher DP
51nod 1595 回文度 题目描述 如果长度为n的字符串是一个回文串,同时它的长度为floor(n/2)的前缀和后缀是K-1度回文串,则这个字符串被称为K度回文串.根据定义,任何字符串(即使是空字 ...
随机推荐
- Sicily 1151: 简单的马周游问题(DFS)
这道题嘛,直接使用DFS搜索,然后莫名其妙地AC了.后来看了题解,说是move的顺序不同的话可能会导致超时,这时便需要剪枝,真是有趣.原来自己是误打误撞AC了,hhh.题解还有另一种解法是先把一条完整 ...
- MarkdownPad2.5 注册码
邮箱: Soar360@live.com 授权秘钥: GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGImDHzWdD6xhMNLGVpbP2M5SN6b ...
- Activity系列讲解---返回结果的处理
设想一下:由当前Activity跳转到其它Activity,从其它Activity再返回到当前Activity时,如何获取其它Activity存放的数据?下面用一个例子讲解, 点击selsect按钮跳 ...
- QMF滤波器组 理论
QMF滤波器组 经常被用来子带信号分解,降低信号带宽,使各个子带可顺利由通道处理. 2^M个通道,等宽 QMF 正交镜像滤波器 正交滤波器 A(W) 与 A(W+pi) 之间的关系 ...
- Java字节流和字符流区别
1.字节流:直接操作文件本身. 2.字符流:通过缓冲区来操作文件. 所有的文件在硬盘或在传输时都是以字节的方式进行的,包括图片等都是按字节的方式存储的,而字符是只有在内存中才会形成,所以在开发中,字节 ...
- Angular2 组件通信
1. 组件通信 我们知道Angular2应用程序实际上是有很多父子组价组成的组件树,因此,了解组件之间如何通信,特别是父子组件之间,对编写Angular2应用程序具有十分重要的意义,通常来讲,组件之间 ...
- jQuery根据name取input值问题
最近做项目用$("input[name=inputName]").val();去取input值得时候发现取值有问题:总是取第一次输入的值,如果在同一个页面不发生表单提交,然后将in ...
- APM程序分析-ArduCopter.cpp
该文件是APM的主文件. #define SCHED_TASK(func, rate_hz, max_time_micros) SCHED_TASK_CLASS(Copter, &copter ...
- luac++
Cocos2d-x下Lua调用自定义C++类和函数的最佳实践 洪亮 305 2014年08月09日 发布 1 推荐 21 收藏,14.9k 浏览 关于cocos2d-x下Lua调用C++的文档看了 ...
- 解决Java程序连接mysql数据库出现CommunicationsException: Communications link failure错误的问题
一.背景 最近在家里捣鼓一个公司自己搭建的demo的时候,发现程序一启动就会出现CommunicationsException: Communications link failure错误,经过一番排 ...