跳石头
来源:互联网 发布:stm32串口提取数据 编辑:程序博客网 时间:2024/03/29 03:07
还是看了答案。。。自己就是调不对
- 描述
每年奶牛们都要举办各种特殊版本的跳房子比赛,包括在河里从一个岩石跳到另一个岩石。这项激动人心的活动在一条长长的笔直河道中进行,在起点和离起点L远 (1 ≤L≤ 1,000,000,000) 的终点处均有一个岩石。在起点和终点之间,有N (0 ≤N ≤ 50,000) 个岩石,每个岩石与起点的距离分别为Di (0 <Di <L)。
在比赛过程中,奶牛轮流从起点出发,尝试到达终点,每一步只能从一个岩石跳到另一个岩石。当然,实力不济的奶牛是没有办法完成目标的。
农夫约翰为他的奶牛们感到自豪并且年年都观看了这项比赛。但随着时间的推移,看着其他农夫的胆小奶牛们在相距很近的岩石之间缓慢前行,他感到非常厌烦。他计划移走一些岩石,使得从起点到终点的过程中,最短的跳跃距离最长。他可以移走除起点和终点外的至多M(0 ≤ M ≤N) 个岩石。
请帮助约翰确定移走这些岩石后,最长可能的最短跳跃距离是多少?
- 二分啊 注意答案是什么 mid?l?r?可以三个都判断一下,C(l),C(mid),C(r)按照贪心的顺序
- 代码
- #include <set>
#include <map>
#include <queue>
#include <deque>
#include <cstdio>
#include <string>
#include <vector>
#include <math.h>
#include <time.h>
#include <utility>
#include <cstdlib>
#include <sstream>
#include <cstring>
#include <stdio.h>
#include <iomanip>
#include <iostream>
#include <algorithm>
using namespace std;
int n,m,L;
int a[1000010];
bool C(int val)
{
int last=0;
int temp=0;
for(int i=1;i<=n+1;i++)
{
if(a[i]-last<val)
{
temp++;
} else last=a[i];
}
if(temp<=m)return 1;
else return 0;
}
int main()
{
cin>>L>>n>>m;
for(int i=1;i<=n;i++)
scanf("%d",a+i);
int l=-1;
int r=L;
int mid;
a[n+1]=1e9+1;
while(r-l>1)
{
mid=(l+r)/2;
if(C(mid))l=mid;
else r=mid;
}
if(C(r))cout<<r<<endl;
else if(C(mid))cout<<mid<<endl;
else cout<<l<<endl;
return 0;
}
0 0
- 跳石头
- 跳石头
- 跳石头
- 跳石头
- 跳石头
- 跳石头
- 跳石头
- 跳石头
- 跳石头
- 跳石头
- 【NOIP2015】day2_ 跳石头
- NOIp2015 跳石头
- [noip2015] 跳石头
- NOIP2015 跳石头 二分
- Noip2015 D2T1 跳石头
- NOIP 2015 跳石头
- 【NOIP2015】Day2T1 跳石头
- NOIP2015DAY2T1【跳石头】
- Android下多彩的StatusView的实现
- linux的top命令参数详解
- Qt 天气预报
- HTTPS 升级指南
- PHP开发C++扩展
- 跳石头
- md5加密
- 真核基因组注释导读
- 最新版 CocoaPods 的安装流程
- GCD---dispatch_once实现单例模式
- 企业工商,诉讼及备案信息查询
- iOS开发几年了,你清楚OC中的这些东西么
- 蓝鸥Unity开发基础——构造方法
- ios 多线程开发