zoukankan      html  css  js  c++  java
  • hdu3068 manacher模板题

    给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 
    回文就是正反读都是一样的字符串,如aba, abba等

    Input输入有多组case,不超过120组,每组输入为一行小写英文字符a,b,c...y,z组成的字符串S 
    两组case之间由空行隔开(该空行不用处理) 
    字符串长度len <= 110000Output每一行一个整数x,对应一组case,表示该组case的字符串中所包含的最长回文长度. 
    Sample Input

    aaaa
    
    abab

    Sample Output

    4
    3
    题意:找最长回文子串
    题解:manacher算法,据说这是一道连后缀数组O(nlogn)也卡的神题。。结果真的是,第一次用manacher写也tle了,估计是写搓了改了好几遍
    #include<map>
    #include<set>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<cstdio>
    #include<iomanip>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define pi acos(-1)
    #define ll long long
    #define mod 10007
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    
    using namespace std;
    
    const double g=10.0,eps=1e-9;
    const int N=2000000+5,maxn=(1<<18)-1,inf=0x3f3f3f3f;
    
    string str;
    int p[N],slen;
    
    void manacher()
    {
        int mx=0,id;
        for(int i=1;i<=slen;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(p[i]+i>mx)
            {
                mx=p[i]+i;
                id=i;
            }
        }
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
     //   cout<<setiosflags(ios::fixed)<<setprecision(2);
        string s;
        int cnt=0;
        while(cin>>s){
            str="$#";
            for(int i=0;i<s.size();i++)
            {
                str+=s[i];
                str+="#";
            }
            slen=str.size();
            memset(p,0,sizeof p);
            manacher();
            int ans=-1;
            for(int i=1;i<str.size();i++)
                ans=max(ans,p[i]-1);
           cout<<ans<<endl;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    git 创建项目
    【转载】Nginx-Lua模块的执行顺序
    【转】微信oauth授权过程
    vps
    【转载】centos安装字体
    【转载】TortoiseGit图标消失
    【转载】linux权限
    js 获取url 中的参数;
    手机下拉/上拉刷新(基于jq或者zepto)
    vscode快捷键
  • 原文地址:https://www.cnblogs.com/acjiumeng/p/6835390.html
Copyright © 2011-2022 走看看