E - River Hopscotch POJ - 3258

Every year the cows hold an event featuring a peculiar version of hopscotch that involves carefully jumping from rock to rock
in a river. The excitement takes place on a long, straight river with
a rock at the start and another rock at the end, L units away
from the start (1 ≤ L ≤ 1,000,000,000). Along the river between
the starting and ending rocks, N (0 ≤ N ≤ 50,000) more
rocks appear, each at an integral distance Di from
the start (0 < Di < L).

To play the game, each cow in turn starts at the starting rock and tries to reach the finish at the ending rock, jumping only
from rock to rock. Of course, less agile cows never make it to the
final rock, ending up instead in the river.

Farmer John is proud of his cows and watches this event each year. But as time goes by, he tires of watching the timid cows of the
other farmers limp across the short distances between rocks placed too
closely together. He plans to remove several rocks in order to
increase the shortest distance a cow will have to jump to reach the
end. He knows he cannot remove the starting and ending rocks, but he
calculates that he has enough resources to remove up to M rocks
(0 ≤ MN).

FJ wants to know exactly how much he can increase the shortest distance *before* he starts removing the rocks. Help
Farmer John determine the greatest possible shortest distance a cow
has to jump after removing the optimal set of M rocks.

Input

Line 1: Three space-separated integers: L, N, and M

Lines 2… N+1: Each line contains a single integer indicating how far some rock is away from the starting rock. No two rocks share the same position.

Output

Line 1: A single integer that is the maximum of the shortest distance a cow has to jump after removing M rocks

Sample Input

25 5 2

2

14

11

21

17

Sample Output

4

Hint

Before removing any rocks, the shortest jump was a jump of 2 from 0 (the start) to 2. After removing the rocks at 2 and 14, the shortest required jump is a jump of 4 (from 17 to 21 or from 21 to 25).

思路

  • 题意:在一个 竖直的河道内有 有 n+2个岩石, 然后又给了我们 出第一块岩石s之后的n+1块岩石距离 s岩石的距离,奶牛们可以从 从起始s的岩石,到终点e岩石,奶牛只能岩石沿着相邻的岩石 跳跃,问当我们从 s 岩石到e岩石之间的n块岩石之间选择的 m块移除后, 奶牛从 s 一路跳到 e 岩石所需的最小跳最大可以是多少.

  • 思路:我们直接用 二分答案,去枚举每一个移除距离,然后如果两块岩石之间的距离小于 我们二分枚举的距离的话,我们就直接把当前这块石头移除,需要注意的是,在移除当前这块石头之后我们,我们还要考虑后面的 石头到 被移除的石头之前的石头的距离是不是也小于我们枚举的 距离 (具体这样的实现 请看代码)

大佬代码

#include<cstdio>
#include<algorithm>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int maxn=5e4+10;
int a[maxn];
int n,m,L;
int f(int x)
{
int l,r;
l=0,r=1;
int ans=0;
while(r<n+2)
{
if(a[r]-a[l]<x)//若最后的end都不满足 就把l所在去了,代码没写那个因为效果一样
{
r++;
ans++;
}
else
{
l=r;
r++;
}
}
return ans;
}
int solve()
{
int l=0,r=L,ans,mid;
while(l<=r)
{
mid=(l+r)/2;
if(f(mid)<=m)
{
ans=mid;
l=mid+1;
}
else
r=mid-1;
}
return ans;
}
int main()
{
while(~scanf("%d %d %d",&L,&n,&m))
{
a[0]=0;
a[n+1]=L;
for(int i=1;i<=n;++i)
scanf("%d",a+i);
sort(a,a+n+2);
printf("%d\n",solve());
}
return 0;
}

朴素的暴力代码

#include<iostream>
#include<vector>
#include<cstdio>
#include<algorithm>
using namespace std; const int Len = 5e5; int s, n, m;
vector<int> ar; bool work(int mid, vector<int> br)
{
int cnt = 0;
int last = 0;
for(int i = 0; i < br.size() - 2; )
{
int pos = upper_bound(br.begin() + i, br.end() - 1, mid + br[i] - 1) - br.begin();
cnt += pos - i - 1;
last = pos - 1;
i = pos;
} int si = br.size();
if(si > 2 && last != n && br[n+1] - br[n] < mid)
cnt ++;
//cout << mid << " " << cnt << endl;
return cnt <= m;
} int main()
{
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
//freopen("A.txt","r", stdin);
cin >> s >> n >> m;
ar.push_back(0);
int tem;
for(int i = 1; i <= n; i ++)
cin >> tem, ar.push_back(tem);
sort(ar.begin(), ar.end());
ar.push_back(s); int l = 1e9 + 7, r = s;
for(int i = 1; i <= n+1; i ++)
l = min(l, ar[i] - ar[i - 1]); int mid;
int ans;
while(l <= r)
{
mid = (l + r) >> 1 ; if(work(mid, ar))
l = mid + 1, ans = mid;
else
r = mid - 1;
}
cout << ans << endl; return 0;
}

E - River Hopscotch POJ - 3258(二分)的更多相关文章

  1. River Hopscotch POJ - 3258

    Every year the cows hold an event featuring a peculiar version of hopscotch that involves carefully ...

  2. Divide and Conquer:River Hopscotch(POJ 3258)

     去掉石头 题目大意:一群牛在河上的石头上跳来跳去,现在问你如何通过去掉M个石头,使得牛跳过石头的最短距离变得最大? 这一题比较经典,分治法的经典,二分法可以很方便处理这个问题,我们只要明白比较函数这 ...

  3. River Hopscotch-[二分查找、贪心]

    Description Every year the cows hold an event featuring a peculiar version of hopscotch that involve ...

  4. poj 3258 二分

    题意:看了很久才懂,有n个石头,去掉m个后,求跳两个石头或石头和岸边距离最小的最大值,就是至少要跳的距离的最大. 参考博客: 代码: #include<stdio.h> #include& ...

  5. POJ 3258 River Hopscotch(二分答案)

    River Hopscotch Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 21939 Accepted: 9081 Desc ...

  6. [ACM] POJ 3258 River Hopscotch (二分,最大化最小值)

    River Hopscotch Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6697   Accepted: 2893 D ...

  7. POJ 3258:River Hopscotch 二分的好想法

    River Hopscotch Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9326   Accepted: 4016 D ...

  8. 【POJ - 3258】River Hopscotch(二分)

    River Hopscotch 直接中文 Descriptions 每年奶牛们都要举办各种特殊版本的跳房子比赛,包括在河里从一块岩石跳到另一块岩石.这项激动人心的活动在一条长长的笔直河道中进行,在起点 ...

  9. 二分搜索 POJ 3258 River Hopscotch

    题目传送门 /* 二分:搜索距离,判断时距离小于d的石头拿掉 */ #include <cstdio> #include <algorithm> #include <cs ...

随机推荐

  1. 谈谈集合.Queue

    之前说到,Java中集合的主要作用就是装盛其他数据和实现常见的数据结构.所以当我们要用到"栈"."队列"."链表"和"数组&quo ...

  2. VUE实现Studio管理后台(完结):标签式输入、名值对输入、对话框(modal dialog)

    一周的时间,几乎每天都要工作十几个小时,敲代码+写作文,界面原型算是完成了,下一步是写内核的HTML处理引擎,纯JS实现.本次实战展示告一段落,等RXEditor下一个版本完成,再继续分享吧.剩下的功 ...

  3. 第八章、小节三keep-alive

    主要缓存的是ajax中的json 我的路由中的内容被加载过一次,我就把路由中的内容放到内存中,下次再进入这个路由的时候,不需要重新加载页面,直接从内存中获取数据. 切换不同城市,调用不同城市数据 但是 ...

  4. 数据挖掘入门系列教程(三)之scikit-learn框架基本使用(以K近邻算法为例)

    数据挖掘入门系列教程(三)之scikit-learn框架基本使用(以K近邻算法为例) 简介 scikit-learn 估计器 加载数据集 进行fit训练 设置参数 预处理 流水线 结尾 数据挖掘入门系 ...

  5. Spark RDD Tutorial

    Spark RDD教程 这个教程将会帮助你理解和使用Apache Spark RDD.所有的在这个教程中使用的RDD例子将会提供在github上,供大家快速的浏览. 什么是RDD(Rssilient ...

  6. Ubuntu部署Asp.net core网站无法访问

    前几天应工作需要,在阿里云上部署一个测试站点.本以为分分钟的事情,没想到打脸了. 当时直接新建一个webapi项目,publish后直接上传到阿里云,随后设置nginx转发网站端口5000. 接着打开 ...

  7. 本地Hadoop集群搭建

    什么是Hadoop? Hadoop是一个开源的Apache项目,通常用来进行大数据处理. Hadoop集群的架构: master节点维护分布式文件系统的所有信息,并负责调度资源分配,在Hadoop集群 ...

  8. 深度学习与人类语言处理-语音识别(part1)

    语音识别 语音识别该何去何从? 1969年,J.R. PIERCE:"语音识别就像把水变成汽油.从大海中淘金.治疗癌症.人类登陆月球" 当然,这是50年前的想法,那么语音识别该如何 ...

  9. Linux 文件系统及 ext2 文件系统

      linux 支持的文件系统类型 Ext2:     有点像 UNIX 文件系统.有 blocks,inodes,directories 的概念. Ext3:     Ext2 的加强版,添加了日志 ...

  10. js获取按钮的文字

    button按钮有两种情况: 1 <input type="button" id="button" value="button"> ...