zoukankan      html  css  js  c++  java
  • manacher算法

    hdu:3068

    #include <stdio.h>
    #include <iostream>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    int min(int a,int b)
    {
        return a<b?a:b;
    }
    char s[110006];
    char t[110006*3];
    int p[110006*3]={0};
    int n=1;
    void change(char r[])
    {
        int len=strlen(r);
        int i;
        t[0]='$';
        for(i=0;i<len;i++)
        {
            t[n++]='#';
            t[n++]=s[i];
        }
        t[n]='#';
        cout<<t<<endl;
    }
    void manacher()
    {
        int id=0,mxright=0;
        for(int i=1;i<=n;i++)
        {
            if(mxright>i)
            {
                p[i]=min(p[2*id-i],mxright-i);
            }
            else
            {
                p[i]=1;
            }
            while(t[i+p[i]]==t[i-p[i]])
            {
                p[i]++;
            }
            if(p[i]+i>mxright)
            {
                mxright=p[i]+i;
                id=i;
            }
        }
    }
    int main()
    {
        while(scanf("%s",s)!=EOF)
        {
            change(s);
            manacher();
            int mx=0;
            for(int i=1;i<=n;i++)
            {
                if(mx<p[i])
                {
                    mx=p[i];
                }
            }
            cout<<mx-1<<endl;
            memset(p,0,sizeof(p));
            memset(s,'',sizeof(s));
            memset(t,'',sizeof(t));
            n=1;
        }
        return 0;
    }

    不懂可以参考大佬讲解:http://www.61mon.com/index.php/archives/181/

  • 相关阅读:
    HTML文件中表格(Table)标记的常用属性
    QTP 学习
    QTP与Selenium的比较
    loadrunner简单使用——HTTP,WebService,Socket压力测试脚本编写
    linux
    linux
    AcWing1131 拯救大兵瑞恩(最短路)
    AcWing341 最优贸易(spfa+dp思想)
    AcWing342 道路与航线(最短路+DAG)
    AcWing340 通信线路
  • 原文地址:https://www.cnblogs.com/chinacwj/p/7083141.html
Copyright © 2011-2022 走看看