manacher算法
2016-05-15 20:42
169 查看
//hdu3308 #include <cstdio> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <string> #include <cmath> #include <cstdlib> using namespace std; #define MAX 110005 char str[MAX],T[MAX*2+5]; int P[MAX*2+5]; int manacher() { int len = strlen(str); int k = 0,mx=0,id=0,maxlen=0; T[k++]='$';T[k++]='#'; for(int i=0;i<len;i++){T[k++]=str[i];T[k++]='#';} T[k]=0; //------- for(int i=1;i<k;i++) { if(i<mx) P[i]=min(P[id*2-i],mx-i+1); else P[i]=1; while(T[i+P[i]] == T[i-P[i]])++P[i]; if(i+P[i]-1>mx)id=i,mx=i+P[i]-1; if(maxlen<P[i]-1)maxlen=P[i]-1; } return maxlen; } int main() { while(~scanf("%s",str)) printf("%d\n",manacher()); return 0; }
相关文章推荐
- glog使用与功能修改
- 用Xstream解析XML
- LintCode : Unique Paths
- Azure ServiceBus 架构简介
- 引用与指针
- HDU 1498 50 years, 50 colors(最小顶点覆盖)
- Fragment事务及Fragment实现选项卡功能
- 顺序表应用6:有序顺序表查询
- 从头认识多线程-2.19 synchronized同步方法的无限等待与解决方法
- 深度学习模型之各种caffe版本(Linux和windows)的网址
- 团队博客1
- Nginx安装与优化
- Java基本数据类型和运算符
- C++虚函数表解析
- C++ 函数重载
- 2016百度之星
- mysql字符集修改
- 基于JDBC层数据权限是如何设计的
- 团体程序设计天梯赛-模拟赛(2016年)
- 戒烟20分钟-15年