POJ3528:River Hopscotch(二分)
来源:互联网 发布:成都闪电seo 编辑:程序博客网 时间:2024/06/02 02:52
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 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
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 2214112117
Sample Output
4
Hint
Source
思路:将最小的间距与最大的间距为上下界进行间距的二分,判断能否通过去除M块石头达到该种间距,要处理好判断条件和二分边界的对应。
# include <stdio.h># include <algorithm>using namespace std;int main(){ int L, N, M, a[50002], imin; 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]); ++N; sort(a, a+N); imin = a[1] - a[0]; for(int i=2; i<=N; ++i) imin = min(imin, a[i]-a[i-1]); int l = imin; int r = L; while(l<r) { int sum=0, cnt=0, mid = (l+r)>>1; for(int i=1; i<=N; ++i) { sum += a[i]-a[i-1]; if(sum <= mid)//猜测目标间距可能大于MID,因此小于等于MID间距的都要去一块石头。 ++cnt; else sum = 0; } if(cnt <= M)//能达到要求,即目标间距一定比MID大。 l = mid+1; else//达不到要求,目标间距可能比MID小或等于MID。 r = mid; } printf("%d\n",r); } return 0;}
- POJ3528:River Hopscotch(二分)
- River Hopscotch<poj3528>
- River Hopscotch(二分)
- poj3258--River Hopscotch(二分)
- River Hopscotch(二分最大值)
- POJ3258 River Hopscotch(二分)
- poj 3258 River Hopscotch(二分答案)
- poj 3258 River Hopscotch(二分搜索)
- POJ 3258 River Hopscotch (二分)
- poj 3258 River Hopscotch(二分+贪心)
- POJ 3258 River Hopscotch(二分 跳河)
- POJ 3258 River Hopscotch (二分搜索)
- POJ 3258 River Hopscotch(二分)
- POJ 3258 River Hopscotch(二分)
- poj-3258 River Hopscotch (二分)
- POJ 3258 River Hopscotch (二分经典)
- POJ 3258-River Hopscotch(二分+贪心)
- 【POJ】3258 - River Hopscotch(二分)
- codevs 1058 合唱队形 (动态规划 & LIS)
- 31.显示隐式跳转activity
- Material Design(2)
- 2016年JavaScript领域中最受欢迎的“明星”们
- poj2774 Long Long Message
- POJ3528:River Hopscotch(二分)
- CentOS安装nexus(Maven仓库管理器)
- java中最常用jar包的用途说明
- 搭建ElasticSearch 5.2 Java API开发环境
- Java正确URL解码方式:URLDecoder.decode
- Mac下使用brew安装mongodb
- leetcode 404 Sum of Left Leaves
- OIV用户手册
- 利用JDK8的新特性计算某个目录下的文件中包含字符串的次数