题目传送门

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

思路一:

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

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

  还需要注意的是,写马拉车的板子习惯用的是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. AntD02 Table组件的使用

    1 前提准备 1.1 创建一个angular项目 1.2 将 Ant Design 整合到 Angular 项目中 1.3 官方文档 点击前往 2 简单使用 <nz-table #rowSele ...

  2. Luogu 3537 [POI2012]SZA-Cloakroom

    背包. 首先考虑将所有询问离线按照$m$从小到大排序,然后把所有物品按照$a$从小到大排序,对于每一个询问不断加入物品. 设$f_i$表示在组成容量为$i$的背包的所有方案中$b$最小的一个物品的最大 ...

  3. MagicNotes:如何迈向工作的坦途

    MagicNotes,思绪随风飞扬,不抓住写下来明天就会忘记了. 昨晚在知乎上偶尔看到 @雨农 的关于“为什么我那么努力,吃了那么多苦,也没见那么优秀?”的一个回复,心里有所触动. 本人专科毕业3-4 ...

  4. What’s the Difference Between a Value Provider and Model Binder?

    ASP.NET MVC 3 introduced the ability to bind an incoming JSON request to an action method parameter, ...

  5. (转)Web API 强势入门指南

    原文地址:http://www.cnblogs.com/developersupport/p/aspnet-webapi.html Web API是一个比较宽泛的概念.这里我们提到Web API特指A ...

  6. FractalNet(分形网络)

    -Argues that key is transitioning effectively from shallow to deep and residual representations are ...

  7. 编写高质量代码改善C#程序的157个建议——建议44:理解委托中的协变

    建议44:理解委托中的协变 委托中的泛型变量天然是部分支持协变的.为什么是“部分支持协变”?看下面示例: class Program { public delegate T GetEmployeeHa ...

  8. 【学习】CodeUi

    关于这个,博客园里有很多初级的教程,我是看这篇: http://www.cnblogs.com/luminji/archive/2010/11/18/1880452.html 初学的可以跟着这个做一边 ...

  9. android MVP模式简单介绍

    原文 http://zhengxiaopeng.com/2015/02/06/Android%E4%B8%AD%E7%9A%84MVP/ 前言 MVP作为一种MVC的演化版本在Android开发中受到 ...

  10. 使用web3部署一个比较复杂的智能合约

    以太坊系列之二十一 使用web3部署比较复杂的智能合约 搭建私链上的雷电网络 以太坊系列之二十一 使用web3部署比较复杂的智能合约 1 雷电网络智能合约简单介绍 2 remix 无法部署使用了lib ...