manacher做法,自己找不出问题了,求助
#include<bits/stdc++.h>
#define foir(i,l,r) for (register int i=l;i<=r;++i)
#define fopr(i,l,r) for (register int i=l;i>=r;--i)
#define maxn 5000010
using namespace std;
int n;
char s[maxn<<1];
int p[maxn<<1];
int mid,r;
int ans;
inline void init()
{
cin>>n;
foir(i,1,n)
{
cin>>s[i*2-1];
s[i*2]='#';
}
s[0]='#';
n=n*2-1;
}
int main()
{
init();
foir(i,1,n)
{
if (i<=r) p[i]=min(r-i+1,p[mid*2-i]);
while (i-p[i]>=0&&i+p[i]<=n+1&&s[i-p[i]]==s[i+p[i]]) ++p[i];--p[i];
if (i+p[i]>r)
{
if (i%2==0)
for (register int j=2;j<=(p[i]+4)/2;j+=2)
if (p[i-j]==j)
ans=max(ans,j*2);
mid=i,r=i+p[i];
}
}
cout<<ans<<endl;
return 0;
}