博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 吉哥系列故事——完美队形II 騰訊馬拉松初賽第二輪D題
阅读量:4445 次
发布时间:2019-06-07

本文共 1246 字,大约阅读时间需要 4 分钟。

吉哥系列故事——完美队形II

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)

Total Submission(s): 354    Accepted Submission(s): 99

Problem Description
  吉哥又想出了一个新的完美队形游戏!
  假设有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
 

 

Source
 

 

Recommend
liuyiding
 
分析:
  很多人都用擴展KMP,不懂。。。
  其實這題有一個很好的暴力思路。。。
  
  1.我們把連續相同的合併,然後算出該合併塊的大小。
  2.統計這k個合併塊的前驅和。
  3.“暴力”枚舉中間的最高點,然後向兩邊的合併塊擴展(按照題目給出的約束條件),注意若是兩邊的合併塊大小不一樣,就取最小的那塊,然後不能夠再往兩邊擴展。更新答案。
 
  算法複雜度:O(n)   !
  爲什麽?因為每兩個相鄰的合併塊都是不同元素的,肯定是一個嚴格單調的關係,所以我們每次枚舉中間點的時候,能夠往兩邊擴展的範圍很小。若是很大的話,那麼,我們其實就可以跳到上一次可以擴展到的最右位置了(因為上次的最高點到該位置都是滿足單調遞減的。。。)  
  
  注意的是:擴展的時候需要注意兩邊的合併塊的大小是否相同。代碼略。。。
  
7862855 2013-03-24 10:36:45 Accepted 390MS 1100K G++
 
 
 

转载于:https://www.cnblogs.com/yejinru/archive/2013/03/24/2979428.html

你可能感兴趣的文章
java反射学习个人随笔
查看>>
Linux之crontab
查看>>
pycharm-.db文件打不开问题
查看>>
Win7_自动播放
查看>>
随机数
查看>>
丶使用 checked 关键字处理 溢出 错误信息
查看>>
Docker 搭建Spark 依赖singularities/spark:2.2镜像
查看>>
Python——追加学习笔记(一)
查看>>
C# 学习笔记 --为啥选择C#
查看>>
linux问答
查看>>
C 语言的命名空间
查看>>
第六周进度总结
查看>>
八校联考前3场记录
查看>>
js跟es6实现数组去重,并计算出现了几次
查看>>
TrippleDESCSPEncrypt 加密解密试试看
查看>>
代码复审
查看>>
window对象
查看>>
三层交换机相关知识
查看>>
shell脚本并发执行
查看>>
我开发的内部ORM(二)Mapping组件
查看>>