zoukankan      html  css  js  c++  java
  • 洛谷3805:【模板】manacher算法——题解

    https://www.luogu.org/problemnew/show/P3805

    给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.

    字符串长度为n

    板子题,大致讲解可以看POJ3974:Palindrome

    以及还是不明白为什么我的manacher只要写成函数就会变慢整整一倍,逼于无奈代码只好丑一点。

    #include<cstdio>
    #include<queue>
    #include<cctype>
    #include<cstring>
    #include<iostream>
    #include<vector>
    #include<algorithm>
    using namespace std;
    const int N=22000020;
    int l,p[N];
    char s[N];
    int main(){
        cin>>s+1;
        l=strlen(s+1);
        s[0]='@';
        for(int i=l;i>=1;i--)s[i*2]=s[i];
        for(int i=1;i<=2*l+1;i+=2)s[i]='#';
        s[2*l+2]='?';
        l=2*l+1;
        int ans=0,id,mx;
        for(int i=1;i<l;i++){
        if(i<mx)p[i]=min(p[2*id-i],mx-i);
        else p[i]=1;
        while(s[i+p[i]]==s[i-p[i]])p[i]++;
        if(i+p[i]>mx){
            mx=i+p[i];
            id=i;
        }
        ans=max(ans,p[i]);
        }
        printf("%d
    ",ans-1);
        return 0;
    }

    +++++++++++++++++++++++++++++++++++++++++++

    +本文作者:luyouqi233。               +

    +欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+

    +++++++++++++++++++++++++++++++++++++++++++

  • 相关阅读:
    券商
    养生之道
    房产买卖
    货币常识
    虚拟币
    其他开源项目
    Shiro
    文件上传插件
    JAVA常见问题
    如何写好PPT
  • 原文地址:https://www.cnblogs.com/luyouqi233/p/8709622.html
Copyright © 2011-2022 走看看