我好弱啊怎么现在才学会manacher呢ww
看了一篇manacher讲解的博客感觉很清晰这里就不再讲了。
这题是manacher模板题,贴上模板啦
唉傻傻的被字符串翻两倍给坑了(空间忘记开大两倍了ww)
//Suplex
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#define N 110000+100
using namespace std;
char st[N+N],S[N+N];
int p[N+N];
void readln() {scanf("%*[^\n]");getchar();}
int manacher(char *s){
int len=strlen(s+1);
for(int i=1;i<=len;i++) S[i+i-1]='%',S[i+i]=s[i];
S[len=len+len+1]='%';
int pos=0,R=0;
for(int i=1;i<=len;i++){
if(i<R) p[i]=min(p[pos+pos-i],R-i);else p[i]=1;
while(1<=i-p[i] && i+p[i]<=len && S[i-p[i]]==S[i+p[i]]) p[i]++;
if(i+p[i]>R){pos=i;R=i+p[i];}
}
int ans=0;
for(int i=1;i<=len;i++) ans=max(ans,p[i]-1);
return ans;
}
int main()
{
while(scanf("%s",st+1) != EOF){
printf("%d\n",manacher(st));
readln();
}
return 0;
}