RE求调
查看原帖
RE求调
537914
Zhao_zzZ楼主2023/11/18 16:40

42pts

https://www.luogu.com.cn/record/135733302

#include <bits/stdc++.h>
#define ull unsigned long long
using namespace std;
const int N=11000010;
const int M=127;
int n,res,ans=1;
ull sum1[N],sum2[N],p[N];
char s[N];
ull check1(int l,int r){
	ull ans=sum1[r]-sum1[l-1]*p[r-l+1];
	return ans;
}
ull check2(int l,int r){
	ull ans=sum2[l]-sum2[r+1]*p[r-l+1];
	return ans;
}
int main(){
	scanf("%s",s+1);
	n=strlen(s+1);
	for(int i=1;i<=n;i++) sum1[i]=sum1[i-1]*M+s[i];
	for(int i=n;i>=1;i--) sum2[i]=sum2[i+1]*M+s[i];
	p[0]=1;
	for(int i=1;i<=n;i++) p[i]=p[i-1]*M;

	for(int i=1;i<=n;i++){
		while(check1(i-res,i+res)==check2(i-res,i+res)&&i-res>=1&&i+res<=n)
			res++;
		while(check1(i-ans+1,i+ans)==check2(i-ans+1,i+ans)&&i-ans+1>=1&&i+ans<=n)
			ans++;
	}
	res--,ans--;
	printf("%d",max(ans*2,res*2+1));
	return 0;
}
2023/11/18 16:40
加载中...