首页 > 其他分享 >HDU 3068 最长回文——————Manacher

HDU 3068 最长回文——————Manacher

时间:2022-10-18 16:33:49浏览次数:52  
标签:HDU Ma int Manacher ++ Mp 3068 mx 回文


最长回文

Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 30806 Accepted Submission(s): 11310

Problem Description

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

Input

输入有多组case,不超过120组,每组输入为一行小写英文字符a,b,c…y,z组成的字符串S
两组case之间由空行隔开(该空行不用处理)
字符串长度len <= 110000

Output

每一行一个整数x,对应一组case,表示该组case的字符串中所包含的最长回文长度.

Sample Input

aaaa

abab

Sample Output

4
3


Manacher裸题

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 110000+9;
char Ma[MAXN*2];
int Mp[MAXN*2];

char s[MAXN];

void Manacher(char *s, int len)
{
int l=0;
Ma[l++]='$';
Ma[l++]='#';
for(int i=0;i<len;i++)
{
Ma[l++]=s[i];
Ma[l++]='#';
}
Ma[l]=0;
int mx=0,id=0;
for(int i=0;i<l;i++)
{
Mp[i]=mx>i?min(Mp[2*id-i],mx-i):1;
while(Ma[i+Mp[i]] == Ma[i-Mp[i]])
Mp[i]++;
if(i+Mp[i] > mx)
{
mx =i + Mp[i];
id=i;
}
}
}
int main()
{
while(scanf("%s",s)==1)
{
int len = strlen(s);
Manacher(s,len);
int ans=0;
for(int i=0;i<2*len+2;i++)
ans=max(ans,Mp[i]-1);
cout<<ans<<endl;
}
return 0;
}


标签:HDU,Ma,int,Manacher,++,Mp,3068,mx,回文
From: https://blog.51cto.com/u_15834888/5767182

相关文章

  • HDU 1431 素数回文——————离线暴力打表
    素数回文TimeLimit:2000/1000MS(Java/Others)MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):23585AcceptedSubmission(s):5550ProblemDescript......
  • 51Nod 1088 最长回文子串——————Manacher,马拉车算法
    ​​51Nod1088最长回文子串​​基准时间限制:1秒空间限制:131072KB分值:0难度:基础题回文串是指这种左右对称的字符串。输入一个字符串,输出里最长回文子串的长度。I......
  • HDU 1863 畅通工程(Kruskal)
    畅通工程TimeLimit:1000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):23823    AcceptedSubmission(s):10381Pr......
  • HDU 5676 ztr loves lucky numbers
    ztrlovesluckynumbersTimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/65536K(Java/Others)TotalSubmission(s):51    AcceptedSubmission......
  • HDU 1885 Key Task(BFS)
    KeyTaskTimeLimit:3000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):1809    AcceptedSubmission(s):770Pr......
  • HDU-1054 Strategic Game(树形DP)
    StrategicGameTimeLimit:20000/10000ms(Java/Other)MemoryLimit:65536/32768K(Java/Other)TotalSubmission(s):17AcceptedSubmission(s):11Font:......
  • HDU-1520 Anniversary party(树形DP)
    AnniversarypartyTimeLimit:2000/1000MS(Java/Others)MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):7566AcceptedSubmission(s):3321P......
  • HDU 4245
    ​​HDU-4245​​​​AFamousMusicComposer​​​​Submit​​​ ​​Status​​DescriptionMr.Bisafamousmusiccomposer.Oneofhismos......
  • HDU 1698 Just a Hook(线段树)
    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1698思路:updata()区间替换,query()区间求和先上3篇博客1:http://blog.sina.com.cn/s/blog_a2dce6b30101l8bi.html 2:ht......
  • HDU 5373 The shortest problem(判断一个数能否被11整除)
    题目地址;​​点击打开链接​​思路:参考队友的代码写的,资料地址:​​点击打开链接​​ 怎样判断一个数能不能被11整除?判断一个数能不能被11整除与判断一个数能不能被......