zoukankan      html  css  js  c++  java
  • [模板]manacher算法

    Code:

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #define setIO(s) freopen(s".in","r",stdin) 
    #define maxn 51000100
    using namespace std;
    char s[maxn],str[maxn];
    int p[maxn];
    int Init(){
        int len=strlen(s);
        str[0]='$',str[1]='#';
        int j=1;
        for(int i=0;i<len;++i) 
            str[++j]=s[i],str[++j]='#'; 
        str[++j]='';
        return j;
    }
    int Manancher(){
        int len=Init(),maxv=0,id=1,mx=1;
        for(int i=1;i<len;++i){
            if(mx>i) p[i]=min(p[2*id-i],mx-i);
            else p[i]=1;
            while(str[i-p[i]]==str[i+p[i]]) p[i]++;
            if(mx<i+p[i]) id=i,mx=i+p[i];
            maxv=max(maxv,p[i]-1); 
        }
        return maxv; 
    }
    int main(){
        scanf("%s",s); 
        printf("%d
    ",Manancher()); 
        return 0;
    }
    

      

  • 相关阅读:
    Flesch Reading Ease (poj 3371)
    保留道路
    列车调度
    三角形
    高精度加法
    AC自动机(1)
    线段树
    并查集(3)
    并查集(2)
    并查集
  • 原文地址:https://www.cnblogs.com/guangheli/p/10264839.html
Copyright © 2011-2022 走看看