2024.1.29 寒假集训$\ $模板
#include<bits/stdc++.h>
using namespace std;
const int N=1e6;
string s,t="@#";
int n,d[N];
void baoli()
{
for(int i=0;i<n;i++){
d[i]=1;
while(i-d[i]>=0&&i+d[i]<n&&s[i-d[i]]==s[i+d[i]])d[i]++;
cout<<d[i]<<' ';
}
return ;
}
void manacher()
{
for(int i=0;i<n;i++){
t+=s[i];
t+='#';
}
n=2*n+1;
for(int i=0,l=0,r=-1;i<n;i++){
if(i>r){
d[i]=1;
while(i-d[i]>=0&&i+d[i]<n&&t[i-d[i]]==t[i+d[i]])d[i]++;
}
else{
int j=l+r-i;
d[i]=min(d[j],j-l+1);
while(i-d[i]>=0&&i+d[i]<n&&t[i-d[i]]==t[i+d[i]])d[i]++;
}
l=i-d[i]+1;
r=i+d[i]-1;
d[i]=(d[i]+1)/2;
if(i%2==0&&i!=0)cout<<d[i]<<' ';
}
return ;
}
int main()
{
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
cin>>n;
cin>>s;
baoli();
cout<<endl;
manacher();
cout<<endl;
}