hdu3068 Manacher模板
2016-04-27 10:10
183 查看
#include <iostream> #include <cstdio> #include <string> #include <cstring> #include <fstream> #include <algorithm> #include <cmath> #include <queue> #include <stack> #include <vector> #include <map> #include <set> #include <iomanip> using namespace std; //#pragma comment(linker, "/STACK:102400000,102400000") #define maxn 200005 #define MOD 1000000007 #define mem(a , b) memset(a , b , sizeof(a)) #define LL long long #define ULL long long const long long INF=0x3fffffff; #define N 110010 char s[N*2],str[N*2]; int n,p[N*2]; void fun() { int len=(int)strlen(s); str[0]='$';str[1]='#'; n=2; for(int i=0;i<len;i++) { str[n++]=s[i]; str[n++]='#'; } str ='\0'; } void Manacher() { int i,id,mx=0; for(i=1;i<n;i++) { if(mx > i) p[i]=min(p[2*id-i],p[id]+id-i); else p[i]=1; for(;str[i+p[i]] == str[i-p[i]];p[i]++) ; if(p[i]+i > mx) { mx=p[i]+i; id=i; } } } void work() { int ans=-1; for(int i=1;i<n;i++) ans=max(ans,p[i]); printf("%d\n",ans-1); } int main() { while(scanf("%s",s)!=EOF) { fun(); Manacher(); work(); } return 0; }
相关文章推荐
- Java Integer 判等误区
- Bootstrap(一) 排版
- 策略模式--Java篇
- linux VM命令下查找
- Oracle 异常
- ActiveMQ消息存储机制
- MongoDB安装与开启问题
- 文章标题
- APUE阅读笔记(九)——进程关系
- Android快捷方式
- 一般后台只有一个集合传到jsp页面来循环,当后台不是一个集合时,前台的循环
- JS函数 计算 今日,昨日,本周,上周,本月
- 头结点和头指针
- LeetCode 10.9 Generate Parentheses
- alarm 信号
- java异常体系
- Android 图片填充动画
- Kafka消费者Consumer常用配置
- 缺8数
- ubuntu 14.04 安装boost