E - River Hopscotch POJ - 3258(二分)
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 ≤ M ≤ N).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(二分)的更多相关文章
- River Hopscotch POJ - 3258
Every year the cows hold an event featuring a peculiar version of hopscotch that involves carefully ...
- Divide and Conquer:River Hopscotch(POJ 3258)
去掉石头 题目大意:一群牛在河上的石头上跳来跳去,现在问你如何通过去掉M个石头,使得牛跳过石头的最短距离变得最大? 这一题比较经典,分治法的经典,二分法可以很方便处理这个问题,我们只要明白比较函数这 ...
- River Hopscotch-[二分查找、贪心]
Description Every year the cows hold an event featuring a peculiar version of hopscotch that involve ...
- poj 3258 二分
题意:看了很久才懂,有n个石头,去掉m个后,求跳两个石头或石头和岸边距离最小的最大值,就是至少要跳的距离的最大. 参考博客: 代码: #include<stdio.h> #include& ...
- POJ 3258 River Hopscotch(二分答案)
River Hopscotch Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 21939 Accepted: 9081 Desc ...
- [ACM] POJ 3258 River Hopscotch (二分,最大化最小值)
River Hopscotch Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6697 Accepted: 2893 D ...
- POJ 3258:River Hopscotch 二分的好想法
River Hopscotch Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9326 Accepted: 4016 D ...
- 【POJ - 3258】River Hopscotch(二分)
River Hopscotch 直接中文 Descriptions 每年奶牛们都要举办各种特殊版本的跳房子比赛,包括在河里从一块岩石跳到另一块岩石.这项激动人心的活动在一条长长的笔直河道中进行,在起点 ...
- 二分搜索 POJ 3258 River Hopscotch
题目传送门 /* 二分:搜索距离,判断时距离小于d的石头拿掉 */ #include <cstdio> #include <algorithm> #include <cs ...
随机推荐
- C#版免费离线人脸识别——虹软ArcSoft V3.0
[温馨提示] 本文共678字(不含代码),8张图.预计阅读时间需要6分钟. 1. 前言 人脸识别&比对发展到今天,已经是一个非常成熟的技术了,而且应用在生活的方方面面,比如手机.车站.天网等. ...
- iview必备技能一、表单验证规则
iView表单组件使用async-validator验证器对表单域中数据进行验证,给Form 设置属性 rules,同时给需要验证的 FormItem 设置属性 prop 指向对应字段即可. 完整的验 ...
- 基于SpringCloud搭建项目-Zuul篇(六)
本文主要介绍zuul的基本原理和在sprngcloud服务下如何使用 一.简单介绍 Zuul 是 Netflix OSS 中的一员,是一个基于 JVM 路由和服务端的负载均衡器.提供路由.监控.弹性. ...
- OpenGL 实现视频编辑中的转场效果
转场介绍 转场效果是什么? 转场效果,简单来说就是两段视频之间的衔接过渡效果. 现在拍摄 vlog 的玩家越来越多,要是视频没有一两个炫酷的转场效果,都不好意思拿出来炫酷了. 那么如何在视频编辑软件中 ...
- 关于adsl vps 拨号ip服务器
我这几天写了一遍在xp上的文章,但是因为xp上貌似只能使用squid2.6版本的,tinyproxy也不能用,而且怎么弄不出去vps端的端口出来 https://www.cnblogs.com/zen ...
- MySQL记录操作(增删改)
概览 MySQL数据操作: DML 在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括 使用INSERT实现数据的插入 UPDATE实现数据的更新 使用DELETE实现数据 ...
- Tries前缀树
Trie,来源于(retrieval,取回,数据检索),是一种多叉树,用来存储字母表上的单词非常有用. Trie经常用来存储动态集合(dynamic set)或者关联数组(associative ar ...
- 扩展el-input 加一个控制精度的命令(directives)
使用el-input时 出现需要精度控制的需求,因为每一个el-input需要精度不用 所以我给这个虚拟dom绑定了一个精度值,根据这个值去控制精度. 下面附上代码: html: <el-inp ...
- Clipboard.SetText()卡住问题
调用 Clipboard.SetText(),每次都抛出异常:"CLIPBRD_E_CANT_OPEN" 调查后发现,实际上SetText有成功的将文本复制到Clipboard,但 ...
- 原创】Java并发编程系列2:线程概念与基础操作
[原创]Java并发编程系列2:线程概念与基础操作 伟大的理想只有经过忘我的斗争和牺牲才能胜利实现. 本篇为[Dali王的技术博客]Java并发编程系列第二篇,讲讲有关线程的那些事儿.主要内容是如下这 ...