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;
}