http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1281

题目来源: Codility
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
收藏
关注
用一个长度为N的整数数组A,描述山峰和山谷的高度。山峰需要满足如下条件, 0 < P < N - 1 且 A[P - 1] < A[P] > A[P + 1]。
 
 
现在要在山峰上插上K个旗子,并且每个旗子之间的距离 >= K,问最多能插上多少个旗子(即求K的最大值)。两个山峰之间的距离为|P - Q|。
以上图为例,高度为:1 5 3 4 3 4 1 2 3 4 6 2。其中可以作为山峰的点为:1 3 5 10。
 
放2面旗子, 可以放在1 和 5。
放3面旗子, 可以放在1 5 和 10。
放4面旗子, 可以放在1 5 和 10,之后就放不下了。
所以最多可以放3面旗子。
Input
第1行:一个数N,表示数组的长度(1 <= N <= 50000)。
第2 - N + 1行:每行1个数Ai(1 <= Ai <= 10^9)。
Output
输出最多能插上多少面旗子(即求K的最大值)。
Input示例
12











2
Output示例
3

显然可以枚举K值,至于判断K是否可行,把第一个山峰看作必放旗子然后往后贪心遇见可以放的位置就放就能找到最大的可放置旗子数,形如时间安排的证明过程假设最优解不包含第一个山峰,会发现第一个山峰包含显然优于不包含。
 #include<bits/stdc++.h>
using namespace std;
int h[];
vector<int>vi;
bool ok(int k)
{
int s=,pre=vi[];
for(int i=;i<vi.size();++i)
{
if(vi[i]-pre>=k){
s++;
pre=vi[i];
}
}
if(s>=k) return ;
return ;
}
int main()
{
int N,i,j;
cin>>N;
for(i=;i<=N;++i) scanf("%d",h+i);
for(i=;i<N;++i)
if(h[i]>h[i-]&&h[i]>h[i+]) vi.push_back(i);
int l=,r=vi.size();
while(l<r){
int mid=r-(r-l)/;
if(ok(mid)) l=mid;
else r=mid-;
}
cout<<l<<endl;
return ;
}

51nod 1281 二分的更多相关文章

  1. 51nod 1243 二分+贪心

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1243 1243 排船的问题 题目来源: Codility 基准时间限制: ...

  2. 51nod 1267 二分

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1267 1267 4个数和为0 基准时间限制:1 秒 空间限制:13107 ...

  3. 51nod 1128 二分

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1128 1128 正整数分组 V2 基准时间限制:1 秒 空间限制:131 ...

  4. 51nod 1686 二分+离散化

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1686 1686 第K大区间 基准时间限制:1 秒 空间限制:131072 ...

  5. 51nod 1105 二分好题

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1105 1105 第K大的数 基准时间限制:1 秒 空间限制:131072 ...

  6. 51nod 1105 二分答案法标准题目

    二分答案法例题,用于练习二分答案的基本思想非常合适,包括了思维方式转换的内容(以前我们所做的一直是利用二分法求得数组元素对应指针之类,但是现在是直接对答案进行枚举). 思路是:首先对输入数组进行排序, ...

  7. 51nod 1281山峰和旗子

    1281 山峰和旗子  题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 用一个长度为N的整数数组A,描述山峰和山谷的高度.山峰需要满足 ...

  8. 51nod 平均数(二分+树状数组)

    题目链接: 平均数 基准时间限制:4 秒 空间限制:131072 KB 分值: 80 LYK有一个长度为n的序列a. 他最近在研究平均数. 他甚至想知道所有区间的平均数,但是区间数目实在太多了. 为了 ...

  9. 51nod 1799 二分答案(分块打表)

    首先题目等价于求出满足运行二分程序后最后r=k的排列种数. 显然对于这样的二分程序,起作用的只有mid点,mid处的值决定了接下来要递归的子区间. 于是可以一遍二分求出有多少个mid点处的值<= ...

随机推荐

  1. okhttp 防止自动删除url中的./和../

    测试任意文件读取漏洞是需要在url中加上 ../../ 之类的字符,但是如果使用三方库Apache httpclient或okhttp,他们都会自动删除url中的  ../ ,通过修改okhttp的源 ...

  2. CentOS中yum安装Java

    查看CentOS自带JDK是否已安装.◆输入:yum list installed |grep java. 若有自带安装的JDK,如何卸载CentOS系统自带Java环境?◆卸载JDK相关文件输入:y ...

  3. Hadoop “Name node is in safe mode” 错误解决方法

    Hadoop 解除 "Name node is in safe mode" 运行hadoop程序时,有时候会报以下错误:org.apache.hadoop.dfs.SafeMode ...

  4. (2.3)学习笔记之mysql基础操作(表/库操作)

    本系列学习笔记主要讲如下几个方面: 本文笔记[六:表操作--线上可以直接删除表吗?] 附加:库操作 [1]创建制定字符集的数据库 需求描述: 在创建DB的时候指定字符集. 操作过程: 1.使用crea ...

  5. Oracle学习笔记—connect、resource和dba三种权限(转载)

    转载自: connect.resource和dba三种标准角色: 授权语句: grant connect ,resource,dba to user with admin option; (注意:其中 ...

  6. LSTM梳理,理解,和keras实现 (一)

    注:本文主要是在http://colah.github.io/posts/2015-08-Understanding-LSTMs/ 这篇文章的基础上理解写成,姑且也可以称作 The understan ...

  7. dict字典常用方法总结,数据解构(解包)

    dict {'name':'holle'}字典存储大量关联型数据,可迭代的,最多只有200个键.查询数据速度非常快,符合二分查找(有100个数比如找75会先找到50然后判断,所以2^7次方7次即可找到 ...

  8. SpringBoot整合Redis集群

    一.环境搭建 Redis集群环境搭建:https://www.cnblogs.com/zwcry/p/9174233.html 二.Spring整合Redis集群 1.pom.xml <proj ...

  9. 一些逼格略高的 js 片段

    // 一个接一个运行 // timeout 不能直接放在 for 里面,暂时不知道为什么 function functionOneByOne(fn, times, duration) { for(va ...

  10. java验证类ValidUtils

    ValidUtils.java package com.lyqc.utils; import org.apache.commons.lang.StringUtils; public class Val ...