River Hopscotch POJ - 3258 (最大化最小值 思维二分)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leekerian/article/details/82657695
#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;

const int maxn=55555;

int l,n,d;

int a[maxn];

bool judge(int mid)
{
    int cont=0;
    int st=0;
    for(int i=0;i<n;i++)
    {
        if(a[i]-st<mid)
            cont++;
        else
            st=a[i];
    }
    if(cont>d)
        return false;
    else
        return true;
}
int main()
{
    while(scanf("%d %d %d",&l,&n,&d)!=EOF)
    {
        for(int i=0;i<n;i++)
            scanf("%d",&a[i]);
        sort(a,a+n);
        int ans=0;
         int ll=0;
         int rr=l;
         while(ll<=rr)
         {
             int mid=(ll+rr)/2;
             if(judge(mid))
             {
                 ll=mid+1;
                 ans=mid;
             }
             else
             {
                 rr=mid-1;
             }
         }
         printf("%d\n",ans);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/leekerian/article/details/82657695