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
  • 相关阅读:
    WPF Caliburn 学习笔记(五)HelloCaliburn
    MSDN 教程短片 WPF 20(绑定3ObjectDataProvider)
    MSDN 教程短片 WPF 23(3D动画)
    比赛总结一
    HDU3686 Traffic Real Time Query System
    HDU3954 Level up
    EOJ382 Match Maker
    UESTC1565 Smart Typist
    HDU3578 Greedy Tino
    ZOJ1975 The Sierpinski Fractal
  • 原文地址:https://www.cnblogs.com/acjiumeng/p/6835390.html
Copyright © 2011-2022 走看看