跳石头

原创 2016年08月29日 09:43:36

还是看了答案。。。自己就是调不对

描述

每年奶牛们都要举办各种特殊版本的跳房子比赛,包括在河里从一个岩石跳到另一个岩石。这项激动人心的活动在一条长长的笔直河道中进行,在起点和离起点L远 (1 ≤ L≤ 1,000,000,000) 的终点处均有一个岩石。在起点和终点之间,有N (0 ≤ N ≤ 50,000) 个岩石,每个岩石与起点的距离分别为Di (0 < Di < L)。

在比赛过程中,奶牛轮流从起点出发,尝试到达终点,每一步只能从一个岩石跳到另一个岩石。当然,实力不济的奶牛是没有办法完成目标的。

农夫约翰为他的奶牛们感到自豪并且年年都观看了这项比赛。但随着时间的推移,看着其他农夫的胆小奶牛们在相距很近的岩石之间缓慢前行,他感到非常厌烦。他计划移走一些岩石,使得从起点到终点的过程中,最短的跳跃距离最长。他可以移走除起点和终点外的至多M (0 ≤ MN) 个岩石。

请帮助约翰确定移走这些岩石后,最长可能的最短跳跃距离是多少?

二分啊 注意答案是什么 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;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

【NOIP2015】 跳石头(二分查找)

题目描述 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间,有N块岩...

NOIP 2015[D2 T1] 跳石头

看到这个题,想到了二分答案。用二分的方法枚举最小距离x,和前面石块之间距离(变化)大于这个距离的石块就去掉,把去掉的石块数和m作比较,来变换x,最后找到答案; 但是,第一次写,没有想到如果前面的石块...

usaco 2006 Dec【River Hopscotch跳石头】

Description 奶牛们喜欢参加一种特别的运动——跳石头。它们分别在一条小河的两岸设置了起点和终点,各 放了一块石头,起点和终点间的跨度有 L 米。然后又在河中间放置了 N 块石头,这些石...

跳石头 NOIP2015 提高组 Day2 T1

codevs 4768 跳石头 题目描述 Description 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛...

【noip2015】【Day2】【跳石头】【字串】

1.跳石头 (stone.cpp/c/pas) 【问题描述】 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选 ...
  • Sue2333
  • Sue2333
  • 2016年10月25日 21:32
  • 335

NIOP2015Day2T1 跳石头解题报告

原题见洛谷(https://www.luogu.org/problem/show?pid=2678) 题目背景一年一度的“跳石头”比赛又要开始了!题目描述这项比赛将在一条笔直的河道中进行,河道中分布...

NOIP2015复赛提高组day2(A:跳石头 B:子串 C:运输计划)

A题: 水题, 二分答案,然后每次跳大于这个数值的最小距离就行了 如果最后一步距离不够, 那么前一步直接跳到终点 (博主并不知道这怎么证明) 只是这种方法一想到就觉得是显然的 但是博主还...

Noip2015 跳石头[vijos 1981]

NOIP 2015 提高组 Day 2 第一题

Noip2015 D2T1 跳石头

题目意思如上,求最短距离的最大值,即极小值的最大值,所以二分。 这一题,因为搬走的石头的个数不超过m就行,肯定是二分最小距离。 每次二分一个最小距离,从第一个石头到终点,如果当前石头足够跳过下一块石头...
  • klxwl
  • klxwl
  • 2016年10月18日 12:00
  • 126

Leetcode-403.Frog Jump(青蛙跳石头)

今天的题目是:Leetcode 403-青蛙跳 A frog is crossing a river. The river is divided into x units and at each ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:跳石头
举报原因:
原因补充:

(最多只允许输入30个字)