zoukankan      html  css  js  c++  java
  • Evanyou Blog 彩带

      题目传送门

      

    题目描述

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

    字符串长度为n

    输入输出格式

    输入格式:

     

    一行小写英文字符a,b,c...y,z组成的字符串S

     

    输出格式:

     

    一个整数表示答案

     

    输入输出样例

    输入样例#1:
    aaa
    输出样例#1:
    3

    说明

    字符串长度len <= 11000000


      分析:manacher算法模板,算法分析就不具体讲了,five20大佬讲的挺好的,可以参照一下他的博客

      Code:

      

    #include<bits/stdc++.h>
    using namespace std;
    const int N=2e7+3e6+7;
    char s[N],neo[N];int p[N];
    int change()
    {
      int len=strlen(s);
      int ret=0;neo[ret++]='$';
      for(int i=0;i<len;i++)
        neo[ret++]='#',neo[ret++]=s[i];
      neo[ret++]='#';neo[++ret]='';return ret;
    }
    int manacher()
    {
      int len=change();
      int ans=-N,id,mx=0;
      for(int i=1;i<=len;i++){
        if(i<mx)p[i]=min(p[id*2-i],mx-i);
        else p[i]=1;
        while(neo[i-p[i]]==neo[i+p[i]])p[i]++;
        ans=max(ans,p[i]-1);
        if(i+p[i]>mx)id=i,mx=i+p[i];
      }
      return ans;
    }
    int main()
    {
      scanf("%s",s);
      printf("%d",manacher());
      return 0;
    }
  • 相关阅读:
    0Day – 2011.01.26
    JQuery_PHP 开始新的旅途
    0Day – 2011.01.25
    0Day – 2011.02.04
    Delphi 必须的一致.
    0Day – 2011.01.28
    0Day – 2011.02.23[From B4A]
    足球 看球悲惨的回忆.
    Delphi – EurekaLog6.1.01Ent下载地址
    ubuntu 拨号
  • 原文地址:https://www.cnblogs.com/cytus/p/8973781.html
Copyright © 2011-2022 走看看