1. 程式人生 > >二分答案 簡單題 ACM-ICPC 2017 Asia HongKong

二分答案 簡單題 ACM-ICPC 2017 Asia HongKong

參考部落格

#include<bits/stdc++.h>
using namespace std;
int a[200000];
int n,k;
bool pan(int s)
{
    int rel =0;
    int now = a[1];
    int num=1;
    for(int i=2;i<=n;i++)
    {
        if(a[i]-now>=s)
        {
            num++;
            now = a[i];
        }
        if(num>=k)
        {
            return
true; } } return false; } int main() { while(~scanf("%d%d",&n,&k)) { if(n+k==0)break; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } sort(a+1,a+1+n); int l = 1,r = a[n]-a[1]; while(l<r) { int
m = (l+r+1)/2; if(pan(m)) { l = m; } else r = m-1; } cout<<l<<endl; } return 0; }