POJ 3258 River Hopscotch<二分>_c - river hopscotch测试数

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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-m+1(n,m同题目定义),满足这个条件,说明二分传进来的值可行,我们继续像后寻找更大的,直到循环结束

#include<cstdio>
#include<algorithm>
using namespace std;
int l,n,m;
int a[50005];
int f(int mid){
    int cou=0,sum=0;
    for(int i=0;i<n;i++)
    {
        if(a[i]-sum<mid)//如果小于,就舍去当前的石头
            continue;
        sum=a[i];
        cou++;
    }
    if(l-a[n-1]>=mid)//判断最后一个石头能不能留下来
        cou++;
    if(cou>=n-m+1)
        return 1;
    else
        return 0;
}
int main (){
    while(~scanf("%d%d%d",&l,&n,&m)){
        for(int i=0;i<n;i++)
            scanf("%d",&a[i]);
        sort(a,a+n);
        int ll=0,r=l,ans;
        while(ll<=r){
            int m=(ll+r)/2;
            if(f(m)) {ll=m+1;ans=m;}//满足条件,继续往后寻找.
            else {
                r=m-1;
            }
        }
        printf("%d\n",ans);
    }
}

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

需要这份系统化的资料的朋友,可以戳这里获取

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值