C++二分查找算法之跳石头

跳石头

题目描述

《C++二分查找算法之跳石头》

输入

《C++二分查找算法之跳石头》

输出

《C++二分查找算法之跳石头》

样例输入

25 5 2
2
11
14
17
21

样例输出

4

提示

《C++二分查找算法之跳石头》

代码如下:

#include<cstdio>
int l,r,L,M,N,a[500005],tot,mid,left;
int main()
{
    scanf("%d %d %d",&L,&N,&M);
    r=a[N+1]=L;
    for(int i=1;i<=N;i++)
        scanf("%d",&a[i]);
    while(l<=r)
    {
        mid=(r+l)/2;
        left=0;
        tot=0;
        for(int i=1;i<=N+1;i++)
            if(a[i]-a[left]<=mid) tot++;
                else left=i;
        if(tot<=M) l=mid+1;
            else r=mid-1;
    }
    printf("%d",l);
}

    原文作者:查找算法
    原文地址: https://blog.csdn.net/C20190413/article/details/73222351
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞