HDU 3068 最长回文 Manacher
2017-02-12 12:58
323 查看
#include<iostream> #include<queue> #include<algorithm> #include<stdlib.h> #include<stdio.h> #include<string.h> using namespace std; const int MAX=111111<<1; char Str[MAX]; int Len; int Radius[MAX]; void Manacher() { Radius[0]=1; for (int i=1,k=0;i<Len;i++) { if (k+Radius[k]-1<i) Radius[i]=1; else Radius[i]=min(Radius[2*k-i],k+Radius[k]-i); while (Str[i-Radius[i]]==Str[i+Radius[i]]) Radius[i]++; if (k+Radius[k]-1<i+Radius[i]-1) k=i; } } int main() { while (scanf("%s",Str)!=EOF) { Len=strlen(Str); for (int i=Len;i>=0;i--) { Str[i*2+1]='#'; Str[i*2+2]=Str[i]; } Str[0]='*'; Len=Len*2+2; Manacher(); printf("%d\n",(*max_element(Radius,Radius+Len))-1); } return 0; }
相关文章推荐
- HDU 3068 最长回文 【manacher模版】
- 最长回文 HDU 3068 (裸的Manacher)
- hdu-3068 最长回文 【Manacher算法】
- hdu 3068 最长回文 manacher
- 【最长回文子串 manacher】HDU 3068
- 【Manacher模板】HDU 3068——求最长回文子串
- hdu 3068 最长回文(manacher入门)
- HDU 3068 最长回文 Manacher
- hdu 3068 最长回文 manacher
- HDU 3068(最长回文-manacher)[Template:manacher]
- 【HDU 3068】 最长回文|manacher
- hdu 3068 最长回文 Manacher求最大回文串
- hdu 3068 最长回文(manacher)
- hdu 3068 最长回文 (manacher模板)
- ural1297 Palindrome,hdu 3068 最长回文,Manacher
- hdu 3068 最长回文 【Manacher求最长回文子串,模板题】
- HDU 3068 最长回文(Manacher)
- HDU 3068 - 最长回文(manacher)
- Hdu 3068 最长回文【manacher算法】
- hdu 3068 最长回文(manacher&最长回文子串)