hdu 4513 最长不下降回文序列【manacher】
<题目链接>
假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出一些人,让这些人形成一个新的队形,新的队形若满足以下三点要求,则就是新的完美队形:
1、挑出的人保持原队形的相对顺序不变,且必须都是在原队形中连续的;
2、左右对称,假设有m个人形成新的队形,则第1个人和第m个人身高相同,第2个人和第m-1个人身高相同,依此类推,当然如果m是奇数,中间那个人可以任意;
3、从左到中间那个人,身高需保证不下降,如果用H表示新队形的高度,则H[1] <= H[2] <= H[3] .... <= H[mid]。
现在吉哥想知道:最多能选出多少人组成新的完美队形呢?
Input 输入数据第一行包含一个整数T,表示总共有T组测试数据(T <= 20);
每组数据首先是一个整数n(1 <= n <= 100000),表示原先队形的人数,接下来一行输入n个整数,表示原队形从左到右站的人的身高(50 <= h <= 250,不排除特别矮小和高大的)。Output 请输出能组成完美队形的最多人数,每组输出占一行。
Sample Input
2
3
51 52 51
4
51 52 52 51
Sample Output
3
4 解题分析:
仔细看完题目后,发现就是叫我们求一个最长回文子序列,只不过要加上一个限制条件,即,这个回文序列的左半部分必须是不下降的。这个并不难实现,只需要在平常manacher的模板上做一些修改即可。
就是每次len[i]++时,判断一下是否是不下降的,如果不符合条件。len[i]就不增加。
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std; const int maxn = + ; int s[maxn], str[maxn << ];
int len[maxn << ];
int n, m; void Init()
{
int i;
str[] = -;
for (i = ; i<n; i++)
{
str[ * i + ] = -;
str[ * i + ] = s[i];
}
str[ * i + ] = -;
str[ * i + ] = ;
m = * i + ;
} int manacher()
{
int mx = , id = ;
int ans = -0x3f;
for (int i = ; i <= m; i++)
{
len[i] = mx>i ? min(len[ * id - i], mx - i) : ;
while (str[i - len[i]] == str[i + len[i]] && ((str[i - len[i]] == - )|| (str[i - len[i]]) <= str[i - len[i] + ]))
len[i]++; //加上这个限制条件就行,仔细推敲一下 if (mx<i + len[i])
{
id = i;
mx = i + len[i];
}
ans = max(ans, len[i]);
}
return ans - ;
} int main()
{
int t; cin >> t;
while (t--)
{
scanf("%d", &n);
for (int i = ; i<n; i++)
{
scanf("%d", &s[i]);
}
Init(); printf("%d\n", manacher());
}
return ;
}
2018-08-07
hdu 4513 最长不下降回文序列【manacher】的更多相关文章
- HDU - 3068 最长回文(manacher)
HDU - 3068 最长回文 Time Limit: 2000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u Subm ...
- HDU 3068 最长回文(manacher模板题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3068 题目大意:求字符串s中最长的回文子串 解题思路:manacher模板 代码 #include&l ...
- hdu 3068 最长回文 (Manacher算法求最长回文串)
参考博客:Manacher算法--O(n)回文子串算法 - xuanflyer - 博客频道 - CSDN.NET 从队友那里听来的一个算法,O(N)求得每个中心延伸的回文长度.这个算法好像比较偏门, ...
- hdu 3068 最长回文【manacher】(模板题)
<题目链接> 最长回文 Problem Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.回文就是正反读都是一样的字符串,如ab ...
- HDU - 3068 最长回文 【Manacher】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=3068 思路 n^3 的做法 对于每个字符 同时 往左往右搜 但是要分奇偶 就是 n^3 n^2 的做法 ...
- HDU 3068 最长回文( Manacher模板题 )
链接:传送门 思路:Manacher模板题,寻找串中的最长回文子串 /***************************************************************** ...
- hdu 3068 最长回文 【Manacher求最长回文子串,模板题】
欢迎关注__Xiong的博客: http://blog.csdn.net/acmore_xiong?viewmode=list 最长回文 ...
- Hdu 3068 最长回文字串Manacher算法
题目链接 最长回文 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- HDU 3068 最长回文 (Manacher最长回文串)
Problem Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.回文就是正反读都是一样的字符串,如aba, abba等 Input 输 ...
随机推荐
- Centos7编译hadoop异常:Received fatal alert: handshake_failure
保持网络畅通 或者 配置代理 能够访问cdh的仓库 https://repository.cloudera.com/artifactory/cloudera-repos/ 编译hadoop版本 had ...
- getattr getattribute setattr hasattr delattr
getattr是返回对象属性value的函数,用法:getattr(object,attribute_name[,default]) 如果对象拥有属性,则返回属性value,如果对象没有该属性并且也没 ...
- win10如何获得管理员权限_百度经验
win10如何获得管理员权限_百度经验http://jingyan.baidu.com/article/0aa223755448db88cd0d6450.html 在右下方任务栏的“搜索web和win ...
- js遍历对象的方法
1. for ... in 语句 for (let variable in object) { ... } https://developer.mozilla.org/zh-CN/docs/Web/ ...
- CMake 示例
1.需求 [1].使用第三方动/静太库 [2].本身代码部分编译为动/静态库 [3]多项目管理 原文转自:http://blog.csdn.net/shuyong1999/article/detail ...
- BackBone结合ASP.NET MVC实现页面路由操作
1. 问题的背景 什么是页面路由操作,就是通过浏览器地址栏的标记来实现页面内部的一些操作,这些操作具有异步性和持久性.应用场景主要有页面操作过程中的添加收藏夹的操作.后退操作等过程中能完全恢复界面. ...
- kafka系列二、kafka manager的安装和使用
1. Yahoo kafka manager介绍 项目地址:https://github.com/yahoo/kafka-manager Requirements: Kafka 0.8.1.1 or ...
- windows下解压zip包,包含中文解析
#coding=utf8 import os import zipfile import sys,locale # 本来以为需要,结果不需要 # def p(f): # #print '%s.%s() ...
- openwrt 添加 802.1x客户端njit
1.修改feed的配置文件 feeds.conf.default 添加下面两句: src-svn njit https://github.com/liuqun/openwrt-clients/trun ...
- Git学习笔记一《版本控制之道-使用Git》
1.在Windows中安装完git后,需要进行一下配置:$ git config --global user.name "zhangliang"$ git config --glo ...