输局国税/京师厚仁
查看原帖
输局国税/京师厚仁
1164775
Jadonyzx楼主2024/7/23 15:47

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]);
2024/7/23 15:47
加载中...