题目传送门

题意:求最长回文串长度,要求回文串左边是非下降。

思路一:

  先把连续的回文串,满足先上升再下降的序列处理出来,再对这部分序列做马拉车模板就可以了。

  需要注意的是,由于他要的是非下降的序列,所以要注意等于的情况。

  还需要注意的是,写马拉车的板子习惯用的是char。。但是char的上限是255,'0'+250会爆char。因为这个wa了好几天也没想出bug是什么。

思路二:

  对马拉车算法进行修改,只要在判断回文的时候加入递增这个条件即可。

两个思路都实现了一遍。

#include<bits/stdc++.h>
#define clr(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn=;
int s[maxn<<],ne[maxn<<];
int p[maxn<<],mx,maxx,n,T,a[maxn<<],b[maxn],cnt; int init(int b[],int len){
int j=;
ne[]='$',ne[]='#';
for(int i=;i<=len;i++)
{
ne[j++]=(''+b[i]);
ne[j++]='#';
}
ne[j]='\0';
return j;
}
void Manacher(int b[],int len)
{
if(len==)return;
len=init(b,len);
int id,ma=;
for(int i=;i<len;i++)
{
if(i<ma){
p[i]=min(p[*id-i],ma-i);
}else p[i]=;
while(ne[i-p[i]]==ne[i+p[i]])p[i]++;
maxx=max(maxx,p[i]);
if(i+p[i]>ma){
ma=i+p[i];
id=i;
}
}
}
int main(){
// printf("%d %d %d\n",'#','$','\0');
cin>>T;
while(T--)
{
cin>>n;
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
cnt=,maxx=;
int flag=;
for(int i=;i<=n;i++)
{
if(a[i]>=a[i-]&&flag==){
b[++cnt]=a[i];
}else if(a[i]<=a[i-]){
flag=;
b[++cnt]=a[i];
}else{
Manacher(b,cnt);
cnt=flag=;
int j=i-;
while(a[j]<=a[j+]){
if(j==)break;
b[++cnt]=a[j];
j--;
}
b[++cnt]=a[i];
}
}
Manacher(b,cnt);
printf("%d\n",maxx-);
}
}
#include<bits/stdc++.h>
#define clr(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn=;
int s[maxn<<],ne[maxn<<];
int p[maxn<<],mx,maxx,n,T,a[maxn<<],b[maxn<<],cnt;
int init(){
int j=;
ne[]=-;
ne[]=;
for(int i=;i<=n;i++)
{
ne[j++]=a[i];
ne[j++]=;
}
ne[j]=-;
//printf("j:%d n:%d\n",j,n);
return j;
}
int Manacher(){
int len=init();
int id,ma=,mx=;
//printf("len:%d\n",len);
for(int i=;i<len;i++)
{
if(i<ma){
p[i]=min(p[*id-i],ma-i);
}else p[i]=;
int k=ne[i];
while(ne[i-p[i]]==ne[i+p[i]]&&(ne[i-p[i]]==||ne[i-p[i]]<=k)){
if(ne[i-p[i]]!=)k=ne[i-p[i]];
p[i]++;
}
if(i+p[i]>ma){
ma=i+p[i];
id=i;
}
mx=max(mx,p[i]);
// printf("i:%d mx:%d\n",i,mx);
}
return mx-;
}
int main(){
cin>>T;
while(T--)
{
cin>>n;
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
maxx=Manacher();
cout<<maxx<<endl;
}
}

hdu4513吉哥系列故事——完美队形II 马拉车的更多相关文章

  1. HDU4513 吉哥系列故事——完美队形II Manacher算法

    题目链接:https://vjudge.net/problem/HDU-4513 吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others)    Me ...

  2. hdu----(4513)吉哥系列故事——完美队形II(manacher(最长回文串算法))

    吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)To ...

  3. HDU4513吉哥系列故事――完美队形II(manacher算法)

    这个比最长回文子串就多了一个条件,就是回文字串(这里相当于人的高度)由两端向中间递增. 才刚刚看了看manacher,在用模板A了一道题后,还没有完全理解manacher,然后就准备把这道题也直接带模 ...

  4. HDU4513:吉哥系列故事——完美队形II(Manacher)

    吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)To ...

  5. 吉哥系列故事——完美队形II(hdu4513+Manacher)

    吉哥系列故事--完美队形II Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) T ...

  6. HDU 4513 吉哥系列故事——完美队形II manacher

    吉哥系列故事——完美队形II Problem Description 吉哥又想出了一个新的完美队形游戏! 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希 ...

  7. (回文串 Manacher)吉哥系列故事——完美队形II -- hdu -- 4513

    http://acm.hdu.edu.cn/showproblem.php?pid=4513 吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others) ...

  8. hdu 4513 吉哥系列故事——完美队形II (manachar算法)

    吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) P ...

  9. hdu-4513吉哥系列故事——完美队形II--最长回文

    吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)To ...

随机推荐

  1. validate 不校验的解决办法

    最近使用validate.js用于项目的表单校验,调了半天,怎么都不校验,仔细对照例子发现 例子中要校验的文本框除了ID外还有name属性,而我在做的时候没有name属性,到这里终于 看到了希望,把所 ...

  2. jsoup 的简单应用

    导入相关jar包 package jsoup.zr.com.utils; import java.io.IOException; import java.util.List; import org.j ...

  3. 面试题:Java多线程必须掌握的十个问题 背1

    一.进程与线程?并行与并发? 进程代表一个运行中的程序,是资源分配与调度的基本单位.进程有三大特性: 1.独立性:独立的资源,私有的地址空间,进程间互不影响. 2.动态性:进程具有生命周期. 3.并发 ...

  4. jQuery--全选、反选、取消

    主要知识点: prop()--主要检查和设置checked attr()是针对所有属性,prop()是针对checked和selected等单一存在的,判断他们的true或者false. find() ...

  5. python 添加日期

    import pandas as pd applydata['apply_time'] = pd.to_datetime(applydata.apply_time)# applydata.apply_ ...

  6. Tomcat 与 数据库连接池 的小坑

    连接池的优点众所周知. 我们可以自己实现数据库连接池,也可引入实现数据库连接池的jar包,按要求进行配置后直接使用. 关于这方面的资料,好多dalao博客上记录的都是旧版本Tomcat的配置方式,很可 ...

  7. Struts2 配置及运行时遇到问题

    1.java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilt ...

  8. Java反射学习:深入学习Java反射机制

    一.Java反射的理解(反射是研究框架的基础之一) Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的 ...

  9. Schwartz kernel theorem施瓦兹核定理

    In mathematics, the Schwartz kernel theorem is a foundational result in the theory of generalized fu ...

  10. 编写高质量代码改善C#程序的157个建议——建议26:使用匿名类型存储LINQ查询结果

    建议26:使用匿名类型存储LINQ查询结果 从.NET3.0开始,C#开始支持一个新特性:匿名类型.匿名类型有var.赋值运算符和一个非空初始值(或以new开头的初始化项)组成.匿名类型有如下基本特性 ...