P5119 [USACO18DEC] Convention S

答案具有“最大等待时间的最小值。” 单调性

二分-》 单调性

>>>模拟时1~n

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<bits/stdc++.h>
#define ll long long
#define ddd printf("--------------debug\n");
using namespace std;

int a[100010],n,m,c;
int pd_ok(int x)
{
    int fir=a[1],car=1,peo=1;
    for(int i=2;i<=n;i++)//
    {
        if(car>m) return 0;
        if(++peo>c||a[i]-fir>x) fir=a[i],car++,peo=1;
        //if() fir=a[i],car++;
        //peo++;
    }
    //return 1;
    return car<=m;//i==n -> >
}
int main()
{
    ios::sync_with_stdio(false);cin.tie(0);
    cin>>n>>m>>c;
    for(int i=1;i<=n;i++) cin>>a[i];
    sort(a+1,a+1+n);
//    for(int i=1;i<=n;i++) cout<<a[i];
    
    int l=0,r=a[n]-a[1];
    while(l<r)
    {
        int mid=l+r>>1;
        if(pd_ok(mid)) r=mid;
        else l=mid+1;
    }
    cout<<l<<'\n';
    
    return 0;
}
View Code
 

 

 
posted @ 2023-07-24 14:28  JMXZ  阅读(12)  评论(0)    收藏  举报