rt:板子打错了但是AC了,导致别的马拉车题调炸了
#include<bits/stdc++.h>
#define maxn 30000000
using namespace std;
char a[maxn],b[maxn];
int len,r[maxn],maxr,center,cnt,minl,ans;
signed main(){
cin>>(b+1);len=strlen(b+1);
for(int i=1;i<=len;++i){a[++cnt]='@';a[++cnt]=b[i];}
a[++cnt]='@';a[0]='@';len=cnt;
for(int i=1;i<=len;++i){
if(i>maxr)while(a[i-r[i]]==a[i+r[i]])r[i]++;
else{
int j=center*2-i;
r[i]=min(j-minl,r[j]);
while(a[i-r[i]]==a[i+r[i]])r[i]++;
}
if(i+r[i]>maxr){
maxr=i+r[i];
minl=i-r[i];
center=i;
}
}
for(int i=1;i<=len;++i)ans=max(ans,r[i]-1);
cout<<ans;
return 0;
}
r[i]=min(j-minl,r[j]);
应该为
r[i]=min(maxr-i,r[j]);