过了又又倍经验https://www.luogu.com.cn/problem/P4287
但是这个寄了,没太想明白初始化哪里有问题,拜谢大佬
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
char b[N],s[N];
int n;
void init(){
int k=2;
s[0]='^',s[1]='#';
for(int i=1;i<=n;i++) s[k++]=b[i],s[k++]='#';
s[k]='$';
n=k-1;
}
int p[N],ans;
void manacher(){
int mr=0,mid;
for(int i=1;i<=n;i++){
if(i<mr) p[i]=min(p[mid*2-i],mr-i);
else p[i]=1;
while(s[i+p[i]]==s[i-p[i]]) p[i]++;
if(i+p[i]>mr){
if(s[i]=='#'){
for(int j=max(mr,i+4);j<i+p[i];j++)
if((j-i)%4==0 && p[i-(j-i)/2]>(j-i)/2)ans=max(ans,j-i);
}
mr=i+p[i];
mid=i;
}
}
}
signed main(){
int T;scanf("%d",&T);
while(T--){
ans=0;
scanf("%s",b+1);
n=strlen(b+1);
init();
manacher();
printf("%d",ans);
for(int i=1;i<=n;i++) p[i]=0;
for(int i=1;i<=n+1;i++) s[i]='@';
if(T) putchar('\n');
}
return 0;
}