hdu 3068(manacher模板)

来源:互联网 发布:盗墓笔记网络剧第二季 编辑:程序博客网 时间:2024/06/03 19:45

https://vjudge.net/problem/19933/origin

中文题意,裸的manacher模板

上代码

#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>using namespace std;const int maxn=110010;char Mp[2*maxn];int Ma[2*maxn];void manacher(int len,char a[]){    int l=0;    Mp[l++]='$';    Mp[l++]='#';    for(int i=0;i<len;i++){        Mp[l++]=a[i];        Mp[l++]='#';    }    Mp[l]=0;    int mx=0,id=0;    for(int i=0;i<l;i++){        Ma[i]=i>mx?1:min(Ma[2*id-i],mx-i);        while(Mp[i+Ma[i]]==Mp[i-Ma[i]])Ma[i]++;        if(mx<i+Ma[i]){            mx=i+Ma[i];            id=i;        }    }}int main(){    char a[maxn];    while(~scanf("%s",a)){        int len=strlen(a);        manacher(len,a);        int ans=0;        for(int i=0;i<len*2+2;i++){            ans=max(ans,Ma[i]-1);        }        printf("%d\n",ans);    }    return 0;}
0 0