#26622: 兩次二分搜


YIEC2538 (YHC2538)

學校 : 不指定學校
編號 : 126028
來源 : [111.248.239.15]
最後登入時間 :
2024-03-17 10:49:11
c575. APCS 2017-0304-4基地台 -- 2017年3月APCS | From: [123.194.189.54] | 發表日期 : 2021-08-17 00:46

Check 直徑是否都滿足所有的服務點可以再做一次二分搜。不過 runtime 似乎沒有更快。

 

 

#include <bits/stdc++.h>

using namespace std;

const int N = 5e4+4;

int a[N];

int main(){

    int n,k; cin>>n>>k;

    for(int i = 0; i < n; i++){

        cin>>a[i];

    }

    sort(a,a+n);

    int l = 1, r = 1e9;

    while(l < r){

        int m = (l+r)>>1;

        int now = -1, cnt = 0, fail = 0;

        while(1){

            int ind = upper_bound(a,a+n,now) - a;

            if(ind == n) break;

            now = a[ind] + m;

            if(++cnt > k) {

                fail = 1;

                break;

            }

        }

        if(fail) l = m+1;

        else r = m;

    }

    cout<<l<<'\n';

}

 
 
ZeroJudge Forum