zoukankan      html  css  js  c++  java
  • HDU3068 最长回文 Manacher's Algorithm 马拉车算法 模板

    HDU3068

    复习了一下这个算法,

    注意数组大小要开两倍大。

        #include <algorithm>
        #include  <iterator>
        #include  <iostream>
        #include   <cstring>
        #include   <cstdlib>
        #include   <iomanip>
        #include    <bitset>
        #include    <cctype>
        #include    <cstdio>
        #include    <string>
        #include    <vector>
        #include     <cmath>
        #include     <queue>
        #include      <list>
        #include       <map>
        #include       <set>
        using namespace std;
        //#pragma GCC optimize(3)
        //#pragma comment(linker, "/STACK:102400000,102400000")  //c++
        #define lson (l , mid , rt << 1)
        #define rson (mid + 1 , r , rt << 1 | 1)
        #define debug(x) cerr << #x << " = " << x << "
    ";
        #define pb push_back
        #define pq priority_queue
    
    
    
        typedef long long ll;
        typedef unsigned long long ull;
    
        typedef pair<ll ,ll > pll;
        typedef pair<int ,int > pii;
        typedef pair<int,pii> p3;
    
        //priority_queue<int> q;//这是一个大根堆q
        //priority_queue<int,vector<int>,greater<int> >q;//这是一个小根堆q
        #define fi first
        #define se second
        //#define endl '
    '
    
        #define OKC ios::sync_with_stdio(false);cin.tie(0)
        #define FT(A,B,C) for(int A=B;A <= C;++A)  //用来压行
        #define REP(i , j , k)  for(int i = j ; i <  k ; ++i)
        //priority_queue<int ,vector<int>, greater<int> >que;
    
        const ll mos = 0x7FFFFFFFLL;  //2147483647
        const ll nmos = 0x80000000LL;  //-2147483648
        const int inf = 0x3f3f3f3f;
        const ll inff = 0x3f3f3f3f3f3f3f3fLL; //18
        const int mod = 998244353;
    
        const double PI=acos(-1.0);
    
        // #define _DEBUG;         //*//
        #ifdef _DEBUG
        freopen("input", "r", stdin);
        // freopen("output.txt", "w", stdout);
        #endif
        /*-----------------------showtime----------------------*/
                    int p[300009];
                    char str[300009],t[300009];
                    int Manacher(char *str,int len){
                        t[0] = '$';t[1] = '#';
                        int tot = 2;
                        for(int i=0; i<len; i++){
                            t[tot++]=str[i];
                            t[tot++]='#';
                        }
    
                        int mx = 0,id = 0,reslen = 0,resCenter = 0;
                        for(int i=0; i<tot; i++){
                            if(i<mx) p[i] = min(p[2*id - i] , mx - i);
                            else p[i] = 1;
                            while(t[i+p[i]] == t[i-p[i]])p[i] ++;
                            if(p[i]+i > mx){
                                mx = i + p[i];
                                id = i;
                            }
                            if(reslen < p[i]){reslen = p[i], resCenter = i;}
    
                        }
                        return reslen;
                    }
        int main(){
                    
                    
                    while(~scanf("%s", str)){
                        int len = strlen(str);
                        printf("%d
    ",Manacher(str,len)-1);
                    }
                    return 0;
        }
    HDU3068
  • 相关阅读:
    4.FFMPEGAVFrame
    从0到1实现Web端H.265播放器:视频解码篇
    6.AVCodecContext和AVCodec
    7.SwrContext音频重采样使用
    5.AVStream和AVCodecParameters
    3.AVPacket使用
    FFmpeg:AVFrame结构体分析
    9.下载ffmpeg、使QT支持同时编译32位和64位
    1.ffmpeg基础经常使用知识
    2.AVFormatContext和AVInputFormat
  • 原文地址:https://www.cnblogs.com/ckxkexing/p/9509623.html
Copyright © 2011-2022 走看看