51nod 1088 最长回文子串
2016-11-06 15:25
267 查看
#include <bits/stdc++.h> using namespace std; const int MAXN=200100; char a[MAXN],s[MAXN]; int f[MAXN],n,ans; void manacher(char *a) { int i,r,p,m; s[0]='$';s[1]='#'; for(i=1;i<=n;i++) { s[i<<1]=a[i-1]; s[i<<1|1]='#'; } s[(n+1)<<1]='@'; m=(n+1)<<1; r=p=0; f[1]=1; for(i=2;i<m;i++) { if(r>i) f[i]=min(r-i,f[p*2-i]); else f[i]=1; for(;s[i-f[i]]==s[i+f[i]];f[i]++); if(i+f[i]>r) { r=i+f[i]; p=i; } } ans=0; for(i=2;i<m;i++) ans=max(ans,f[i]-1); } int main() { while(scanf(" %s",a)!=EOF) { n=strlen(a); manacher(a); printf("%d\n",ans); } }
相关文章推荐
- 51nod 1088 最长回文子串
- [51nod] 1088 最长回文子串 #Hash+二分
- 51nod 1088 最长回文子串
- 51nod 1088 最长回文子串
- 51nod_1088 最长回文子串((Manacher算法)
- 51Nod-1088-最长回文子串
- 51Nod 1088 最长回文子串
- 51nod-【1088 最长回文子串】
- 51Nod-1088-最长回文子串
- 1088 最长回文子串 分类: 51nod 2015-07-20 22:09 8人阅读 评
- 【51nod】1088 最长回文子串
- 51nod1089---最长回文子串 V2(51nod基础:Manacher算法)
- 【Manacher算法】51nod 最长回文子串 V2
- 51nod-【1089 最长回文子串 V2(Manacher算法)】
- 51Nod - 1089 最长回文子串 V2(Manacher算法)
- 51nod--1089 最长回文子串V2(Manacher 算法)
- 51nod-【hihocoder #1032 : 最长回文子串】
- 1088 最长回文子串
- 51nod_1089 最长回文子串 V2(Manacher算法)
- 51Nod 1089 最长回文子串 V2(Manacher算法)