zoukankan      html  css  js  c++  java
  • hdu 3068 最长回文

    Manacher裸题。

    #include <cstring>
    #include <stdio.h>
    #define MAXN 110500
    #define min(a,b) (a)<(b)?(a):(b)
    using namespace std;
    int p[MAXN<<1],id,maxn;
    char s[MAXN<<1];
    
    
    void Manacher(){
        int len=strlen(s);
        for(int i=len;i>=0;i--){
            s[i*2+2]=s[i];
            s[i*2+1]='#';
        }
        s[0]='*';
        for(int i=2;i<2*len+1;i++){
            if(p[id]+id>i)p[i]=min(p[2*id-i],p[id]+id-i);
            else p[i]=1;
            while(s[i-p[i]]==s[i+p[i]])p[i]++;
            if(p[id]+id<p[i]+i)id=i;
            if(p[i]>maxn)maxn=p[i];
        }
    }
    
    int main(){
        while(~scanf("%s",s)){
            id=0;maxn=0;
            memset(p,0,sizeof p);
            Manacher();
            printf("%d
    ",maxn-1);
        }
    }



  • 相关阅读:
    A
    MongoDB小结17
    MongoDB小结16
    金蝶无法生成下推发票
    MongoDB小结15
    MongoDB小结14
    MongoDB小结13
    MongoDB小结12
    MongoDB小结11
    MongoDB小结10
  • 原文地址:https://www.cnblogs.com/Cooook/p/7738535.html
Copyright © 2011-2022 走看看