题意:
找个ABBAAB串,回文文回回文串
eg: abbaab abccbaabc
代码如下:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll s[301314];
ll mp[701314];
ll num[701314];
ll r;
ll manacher()
{
ll id=0,right=0;
ll ans=0;
for(ll i=2;i<r;i+=2)
{
if(i<right)
mp[i]=min(mp[2*id-i],right-i);
else
mp[i]=1;
while(i+mp[i]<r&&i-mp[i]>=0&&s[i+mp[i]]==s[i-mp[i]])
mp[i]++;
if(mp[i]-1>ans)
{
ll tmp;
tmp=ans+2;
while(tmp<mp[i])
{
if(tmp<=(mp[i-tmp]-1))
{
ans=tmp;
}
tmp=tmp+2;
}
if(mp[i]+i>right)
{
right=mp[i]+i;
id=i;
}
}
}
return ans/2*3;
}
int main()
{
ll t;
scanf("%lld",&t);
for(ll x=1;x<=t;x++)
{
ll n;
scanf("%lld",&n);
memset(mp,0,sizeof(mp));
memset(s,0,sizeof( s));
r=0;
for(ll i=0;i<n;i++)
{
s[r++]=-1;
scanf("%lld",&s[r++]);
}
s[r++]=-1;
printf("Case #%lld: %lld\n",x,manacher());
}
return 0;
}