调好久调不出来,求大佬看看呜呜呜
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN=1050010,base=131;
int Mod=1011451423;
int t,n,jc[MAXN],num[MAXN],sum[MAXN];char a[MAXN];bool as[MAXN],as2[MAXN],as3[MAXN];
int ms[10]={10000000000037,10009736508713,10009736508731,10009736508763,10000000000183,10000000000259,10000000000267,10000000000273};
int Hsh(int x,char c){
return (x*base%Mod+(int)c)%Mod;
}
signed main(){
scanf("%lld",&t);
jc[0]=1;
for(int i=1;i<=MAXN-5;i++)jc[i]=jc[i-1]*base%Mod;
while(t--){
scanf("%s",a+1);
as[1]=1;
int n=strlen(a+1);
for(int i=0;i<=n+10;i++)as[i]=1;
for(int kk=0;kk<8;kk++){Mod=ms[kk];
for(int i=1;i<=n;i++){
if(a[i]!=a[1])as[1]=0;
num[i]=Hsh(num[i-1],a[i]);
}
for(int i=n;i>=1;i--){
sum[i]=Hsh(sum[i+1],a[i]);
}
as[n]=1;
int jl=0;
for(int i=n-1;i*2-1>n;i--){
jl=Hsh(jl,a[i+1]);
if(jl==(num[i-1]-num[i-n+i-1]*jc[n-i]%Mod+Mod)%Mod){
as[i]&=1;
}
else as[i]=0;
}
for(int i=(n+1)/2;i>=1;i--){
int x=num[i-1],y=(sum[i+1]-sum[2*i]*jc[i-1]%Mod+Mod)%Mod;
if(x==y&&as[2*i-1])as[i]&=1;
else as[i]=0;
}
}
for(int i=1;i<=n;i++){
if(as[i]){
printf("%lld ",i);
}
as[i]=0;
}
printf("\n");
}
return 0;
}