manecher

时间:2023-03-09 17:31:49
manecher
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
char a[],s[];
int n,l,p[],ans,k=-,m=;
void manacher()
{
int pos=,id=,x=;
for(int i=;i<=n-;i++)
{
if(pos<=i) x=;
else x=min(p[*id-i],pos-i);
while(s[i+x]==s[i-x]) x++;
p[i]=x;
if(i+x>pos)
{
pos=i+x;
id=i;
}
}
}
int main()
{
while(cin>>a)
{
if(a[]=='E') return ;
ans=,n=;
l=strlen(a);
s[n++]='%';
for(int i=;i<l;i++)
{
s[n++]='#';
s[n++]=a[i];
}
s[n++]='#';
s[n]='@';
manacher();
for(int i=;i<=n;i++)
if(ans<p[i])
{
ans=p[i];
k=i;
}
if(s[k]=='#') printf("Case %d: %d\n",m++,ans/*);
else printf("Case %d: %d\n",m++,ans/*-);
} }