哇哇哇爆零。。。
输出比样例小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);
}