hdu 3068(manacher模板)

    xiaoxiao2021-04-17  40

    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; }
    转载请注明原文地址: https://ju.6miu.com/read-673913.html

    最新回复(0)