hdu 3068 最长回文 manacher
2014-06-10 21:01
337 查看
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define maxx 20000050 char str[2*maxx]; char s[maxx]; int p[maxx]; void Manacher(int *p,char *str,int len) { int mx=0; int idx=0; for(int i=1; i<len; i++) { p[i]=mx>i?min(p[2*idx-i],mx-i):1; while(str[i+p[i]]==str[i-p[i]]) p[i]++; if(i+p[i]>mx) { mx=i+p[i]; idx=i; } } } int main() { while(scanf("%s",s)!=EOF) { int nn=strlen(s);//需要定义一个变量nn,如果每次调用strlen(s),时间就会长 int n=2*nn+2; str[0]='$'; for(int i=0; i<=nn; i++) { str[2*i+1]='#'; str[2*i+2]=s[i]; } Manacher(p,str,n); int ans=1; for(int i=0; i<n; i++) ans=max(ans,p[i]); printf("%d\n",ans-1); } return 0; }
相关文章推荐
- HDU 3068 最长回文(Manacher 算法)
- 最长回文 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模板)
- hdu 3068 最长回文(manacher入门)
- ural1297 Palindrome,hdu 3068 最长回文,Manacher
- hdu 3068 最长回文 【Manacher求最长回文子串,模板题】
- HDU 3068 - 最长回文(manacher)
- Hdu 3068 最长回文【manacher算法】