rt,P3805 Manacher 板子求调 qwq
#include<bits/stdc++.h>
using namespace std;
char s[11000001],a[22000001];
int n,P[22000001];
int ans=1;
inline void manacher(){
int r=-1,c;
for(int i=1;i<n;i++){
if(i<r){
P[i]=min(P[c*2-i],c-i);
}
else{
P[i]=1;
}
while(a[i+P[i]]==a[i-P[i]]){
P[i]++;
}
if(P[i]+i>r){
r=P[i]+i;
c=i;
}
}
}
signed main(){
scanf("%s",s);
n=strlen(s);
int k=0;
a[k++]='!';
a[k++]='$';
for(int i=0;i<n;i++){
a[k++]=a[i];
a[k++]='$';
}
s[k++]='\0';
n=k;
manacher();
for(int i=0;i<n;i++){
ans=max(ans,P[i]-1);
}
cout<<ans<<endl;
}
//11000000 22000001
//hbhbbhhhhbbhhhhbhbhhbhhhhhbhhhhbbbhbbbbhbhhbhhhbbbhbhbbbbbbb 12
前四个点 WA,后面点全 RE,可能对算法的本质还是没太清楚,求调qwq
(这次 0 分提交是我的第 2.00k 提交。