poj3974 Palindrome(manacher)

来源:互联网 发布:mac vpn推荐 编辑:程序博客网 时间:2024/05/16 07:05

一把好水???

#include <cstdio>#include <cstring>#define N 1000010char str[N],s[N<<1];int p[N<<1],n,tst=0;template <typename T>inline T min(T x,T y){return x<y?x:y;}int main(){//  freopen("a.in","r",stdin);    while(1){        scanf("%s",str+1);        if(str[1]=='E') break;++tst;        int len=strlen(str+1);n=0;        for(int i=1;i<=len;++i) s[++n]='#',s[++n]=str[i];        s[++n]='#';        int id=0,ans=0;        for(int i=1;i<=n;++i){            int mx=id+p[id];            if(i<mx) p[i]=min(p[(id<<1)-i],mx-i);            else p[i]=1;            while(i-p[i]>=1&&i+p[i]<=n&&s[i-p[i]]==s[i+p[i]]) ++p[i];            if(i+p[i]>mx) id=i;            if(p[i]>ans) ans=p[i];        }        printf("Case %d: %d\n",tst,ans-1);    }    return 0;}
原创粉丝点击