求助manacher
查看原帖
求助manacher
160839
Prean楼主2020/7/5 14:14

哇哇哇爆零。。。

输出比样例小1,求助qwq

#include<cstring>
#include<cstdio>
const int M=1.1e7+5;
char n,m,a[M],s[M<<1];
int p[M<<1];
inline int min(const int a,const int b){
    return a>b?b:a;
}
signed main(){
    int i,r=0,mid,ans=0;
    scanf("%s",a);
    n=strlen(a);
    s[m]='`';
    for(i=0;i<n;++i)s[++m]=a[i],s[++m]='#';
    for(i=1;i<m;++i){
        if(i<=r)p[i]=min(p[(mid<<1)-i],p[mid]+mid-i);
        else p[i]=1;
        while(s[i-p[i]]==s[i+p[i]])++p[i];
        if(i+p[i]>r)r=i+p[i],mid=i;
        if(ans<p[i])ans=p[i];
    }
    printf("%d",ans-1);
}
2020/7/5 14:14
加载中...