Manacher算法模板(救救蒟蒻在 HDU T了)http://acm.hdu.edu.cn/

#include
#include
#include
#include
#include
using namespace std;
long long int p[710000];
void ma(string s)
{
    string t="$#";
    memset(p,0,sizeof(p));
    for(int i=0;i     {
        t+=s[i];
        t+="#";
    }
    long long int mx=0;
    long long int id=0;
    long long int rc=0,rl=0;
    for(int i=1;i     {
        if(mx>i)p[i]=min(p[2*id-i],mx-i);
        else p[i]=1;
        while(i-p[i]>=1&&i+p[i]<=t.length()&&t[i-p[i]]==t[i+p[i]])++p[i];
        if(mx         {
            mx=p[i]+i;
            id=i;
        }
        if(rl         {
            rl=p[i];
            rc=i;
        }
    }
    printf("%lld\n",rl-1);
}
int main()
{
    string s;
    while(cin>>s)
    {
        ma(s);
    }
    return 0;
}
 

你可能感兴趣的:(Manacher算法模板(救救蒟蒻在 HDU T了)http://acm.hdu.edu.cn/)