【刷题】【二分】【略水】跳石头

这里主要记录一下这个写的很简单的check函数

#include<bits/stdc++.h>
using namespace std;
int len,n,m;
const int N=5e4+3;
int d[N],ans;

int main()
{
    scanf("%d%d%d",&len,&n,&m);
    for(int i=1; i<=n; i++) scanf("%d",&d[i]);
    d[++n]=len;
    //work
    int l=0,r=len;
    while(l<=r)
    {
        int mid=(l+r)>>1;
        int nw=0,check=0;
        for(int i=1; i<=n && check<=m ; i++)
            if(d[i]-d[nw]<mid) check++;
            else nw=i;
        
        if(check <= m )
            ans=mid,l=mid+1;
        else r=mid-1;
    }
    //output
    printf("%d\n",ans);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/xwww666666/p/11821712.html