[ACM] POJ 3258 River Hopscotch (二分,最大化最小值)
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 6697 | Accepted: 2893 |
Description
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 Mrocks (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 ofM rocks.
Input
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
Sample Input
25 5 2
2
14
11
21
17
Sample Output
4
Hint
Source
解题思路:
这种题目不好理解啊。。。有N+2块石头,给出最后一块到第一块的距离L,输入中间N块石头到第一块石头的距离,要求移除M块石头,使相邻两块石头的距离中的最小值尽可能得大。。。
思路还是二分,找上界和下界。。只是实在是不好理解。。以下代码中
有这种语句
for(int i=1;i<=N;i++)
{
if(temp[i]<=mid)//当前距离小于等于mid,注意mid是当前最小值,假设不删除第i块石头,那么temp[i]则成了理应的最小值
{
cnt++;
temp[i+1]=temp[i+1]+temp[i];
}
}
为什么是temp[i]<=mid,为什么等于也能够呢??假设等于也删除的话,那不意味着不存在相邻两块石头的距离为mid了吗?? 想了好久也没想出来为什么。
各位大侠假设知道为什么。。麻烦在以下评论中留言,感激不尽。。
代码:
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
const int maxn=50010;
int dis[maxn];
int temp[maxn]; int main()
{
int L,N,M;
scanf("%d%d%d",&L,&N,&M);
dis[0]=0;
dis[N+1]=L;
int left=1000000000,right=-1;
for(int i=1;i<=N;i++)
{
scanf("%d",&dis[i]);
}
N++;
sort(dis,dis+N+1); for(int i=N;i>=1;i--)
{
dis[i]=dis[i]-dis[i-1];
if(left>dis[i])
left=dis[i];
if(right<dis[i])
right=dis[i];
}//dis[i]存的是第i块石头到第i-1块石头的距离 while(left<right)
{
for(int i=1;i<=N;i++)
temp[i]=dis[i];
int mid=(left+right)/2;
int cnt=0;
for(int i=1;i<=N;i++)
{
if(temp[i]<=mid)//当前距离小于等于mid,注意mid是当前最小值,假设不删除第i块石头,那么temp[i]则成了理应的最小值
{
cnt++;
temp[i+1]=temp[i+1]+temp[i];
}
}
if(cnt<=M)
left=mid+1;
else
right=mid;
}
cout<<right<<endl;
return 0;
}
[ACM] POJ 3258 River Hopscotch (二分,最大化最小值)的更多相关文章
- poj 3258"River Hopscotch"(二分搜索+最大化最小值问题)
传送门 https://www.cnblogs.com/violet-acmer/p/9793209.html 题意: 有 N 块岩石,从中去掉任意 M 块后,求相邻两块岩石最小距离最大是多少? 题解 ...
- POJ 3258 River Hopscotch(二分答案)
River Hopscotch Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 21939 Accepted: 9081 Desc ...
- poj 3258 River Hopscotch(二分+贪心)
题目:http://poj.org/problem?id=3258 题意: 一条河长度为 L,河的起点(Start)和终点(End)分别有2块石头,S到E的距离就是L. 河中有n块石头,每块石头到S都 ...
- POJ 3258 River Hopscotch 二分枚举
题目:http://poj.org/problem?id=3258 又A一道,睡觉去了.. #include <stdio.h> #include <algorithm> ]; ...
- poj 3258 River Hopscotch 二分
/** 大意:给定n个点,删除其中的m个点,其中两点之间距离最小的最大值 思路: 二分最小值的最大值---〉t,若有距离小于t,则可以将前面的节点删除:若节点大于t,则继续往下查看 若删除的节点大于m ...
- 二分搜索 POJ 3258 River Hopscotch
题目传送门 /* 二分:搜索距离,判断时距离小于d的石头拿掉 */ #include <cstdio> #include <algorithm> #include <cs ...
- POJ 3258 River Hopscotch(二分查找答案)
一个不错的二分,注释在代码里 #include <stdio.h> #include <cstring> #include <algorithm> #include ...
- POJ 3258 River Hopscotch(二分法搜索)
Description Every year the cows hold an event featuring a peculiar version of hopscotch that involve ...
- poj 3258 River Hopscotch 题解
[题意] 牛要到河对岸,在与河岸垂直的一条线上,河中有N块石头,给定河岸宽度L,以及每一块石头离牛所在河岸的距离, 现在去掉M块石头,要求去掉M块石头后,剩下的石头之间以及石头与河岸的最小距离的最大值 ...
随机推荐
- java jxl excel 导入导出的 总结(建立超链接,以及目录sheet的索引)
最近项目要一个批量导出功能,而且要生成一个单独的sheet页,最后后面所有sheet的索引,并且可以点击进入连接.网上搜索了一下,找到一个方法,同时把相关的excel导入导出操作记录一下!以便以后使用 ...
- struts2必要的包
想正常使用struts2.1.6,至少需要如下6 个jar包: struts2-core-2.1.6.jar freemarker-2.3.13.jar commons-logging-1.0.4.j ...
- 约合¥1720 LG法国称G Watch将于6月开卖
近来LG法国官方透露音讯称旗下首款智能手表G Watch将于本年6月份正式出售,预定报价为199欧元(约合¥1720). 这就意味着这款智能手表会在googleI/O大会完成之后就会开端出售,从goo ...
- JAVA常见算法题(三十五)
判断一个整数能被几个9整除. public static void main(String[] args) { f(729); f(730); } public static void f(int n ...
- #line 的作用是改变当前行数和文件名称
#line 的作用是改变当前行数和文件名称,它们是在编译程序中预先定义的标识符命令的基本形式如下: #line number["filename"]其中[]内的文件名可以省略. ...
- 【BZOJ】【3771】Triple
生成函数+FFT Orz PoPoQQQ 这个题要算组合的方案,而且范围特别大……所以我们可以利用生成函数来算 生成函数是一个形式幂级数,普通生成函数可以拿来算多重集组合……好吧我承认以上是在瞎扯→_ ...
- Linux中Shell的执行流程
Shell执行流程 1.Printthe info of reminding 打印提示信息 2.Waitinguser for input(wait) 等待用户输入 3.Acceptthe comma ...
- 使用标准模板find函数来对结构体容器进行查找
最近在写一个项目,项目中需要获得类下面的所有对象,所以我采用了map容器,以string为关键字,list容器为内容来进行查找,而list中是一些struct结构体.由于在插入操作的时候需要判断该对象 ...
- kth-smallest-element-in-a-sorted-matrix
//有很多讨论,比如 // https://discuss.leetcode.com/topic/52865/my-solution-using-binary-search-in-c // https ...
- 读书笔记-C#中装箱拆箱性能
前言 最近在看王涛大神的<你必须知道的.NET(第二版)>一书,嗯,首先膜拜一下…. 在书中的第五章-品味类型中,对装箱与拆箱一节感触很深,概念本身相信每一个程序猿都不陌生,装 ...