Manacher学习笔记

Manacher

Tags:字符串

作业部落

评论地址


极易理解,挂一个dalao的博客
贴个代码吧。

//luogu P3805【模板】manacher算法
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
int l,C,R,p[31000000],Ans;
char s[31000000];
int main()
{
    s[++l]='#';char ch=getchar();
    while(ch>'z'||ch<'a') ch=getchar();
    while(ch>='a'&&ch<='z')
    {
        s[++l]=ch;s[++l]='#';
        ch=getchar();
    }
    for(int i=1;i<=l;i++)
    {
        p[i]=i<R?min(p[C*2-i],R-i):1;
        while(s[i+p[i]]==s[i-p[i]]&&i-p[i]>=1&&i+p[i]<=l) p[i]++;
        if(i+p[i]>R) {R=i+p[i];C=i;}
        Ans=max(Ans,p[i]-1);
    }
    printf("%d\n",Ans); return 0;
}

挂个题单

posted @ 2018-06-07 15:12  饕餮传奇  阅读(267)  评论(0编辑  收藏  举报