zoukankan      html  css  js  c++  java
  • hdu3068最长回文(manacher算法)

    经典的找最长回文字串问题。最快的算法就是manacher(马拉车)算法,可以O(n)出结果。详情见这篇文章

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<string>
    #include<cmath>
    #include<map>
    #include<set>
    #include<list>
    #include<deque>
    #include<vector>
    #include<algorithm>
    #include<stack>
    #include<queue>
    #include<cctype>
    #include<sstream>
    using namespace std;
    #define pii pair<int,int>
    #define LL long long int
    const double eps=1e-10;
    const int INF=1000000000;
    const int maxn=110000+10;
    
    char s[maxn],s2[maxn<<1];
    int p[maxn<<1];
    
    int main()
    {
        //freopen("in2.txt","r",stdin);
        //freopen("out.txt","w",stdout);
        while(scanf("%s",&s[1])!=EOF)
        {
            int i;
            memset(p,0,sizeof(p));
            for(i=1;s[i]!='';i++)
            {
                s2[i<<1]=s[i];
                s2[i<<1|1]='#';
            }
            s2[1]='#';
            s2[0]='*';
            int wid=0,id=1;
            int n=2*i+2;
            int ans=0;
            for(int j=2;j<n;j++)
            {
                if(j<wid)
                {
                    p[j]=min(p[2*id-j],wid-j);
                    /*注意这里不是wid-j+1,因为按之前以id为中心的比较,
                    在id+wid处已经开始不回文了。这里s2[id+wid]必须
                    参与新的比较。 */
                }
                else
                {
                    p[j]=1;
                }
                for(;s2[j-p[j]]==s2[j+p[j]];p[j]++);
                if(j+p[j]>wid)
                {
                    wid=j+p[j];
                    id=j;
                }
                if(ans<p[j]-1)
                {
                    ans=p[j]-1;
                }
            }
            printf("%d
    ",ans);
        }
        //fclose(stdin);
        //fclose(stdout);
        return 0;
    }
  • 相关阅读:
    bzoj3576 [Hnoi2014]江南乐
    codeforces 438D The Child and Sequence
    bzoj1926 [Sdoi2010]粟粟的书架
    bzoj1185 [HNOI2007]最小矩形覆盖
    bzoj1069 [SCOI2007]最大土地面积
    bzoj4569 [Scoi2016]萌萌哒
    西西爆难积分
    概率问题-距离的期望
    各类平均与数列极限
    三角恒等式
  • 原文地址:https://www.cnblogs.com/zywscq/p/4894960.html
Copyright © 2011-2022 走看看