Manacher好久没写了,都忘了。。。。。
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <queue>
#include <vector>
using namespace std;
#define N 120010
int n,T,Ans;
int p[N*2];
char S[N*2],S1[N*2];
void Search(int i)
{
while(S[i-p[i]]==S[i+p[i]])
p[i]++;
}
void Manacher()
{
int x=1,m=0;
for(int i=1;i<=n;i++)
{
p[i]=1;
if(m>=i)
p[i]=min(m-i,p[2*x-i]);
Search(i);
Ans=max(Ans,p[i]-1);
if(m<i+p[i]-1)
m=i+p[i]-1,x=i;
}
}
int main()
{
while(scanf("%s",S1+1)!=EOF)
{
int len=(int)strlen(S1+1);
n=0;
for(int i=1;i<=len;i++)
S[++n]='#',S[++n]=S1[i];
S[++n]='#';
S[0]='$';
Ans=1;Manacher();
printf("%d\n",Ans);
}
return 0;
}