Submission #976770

#TimeUsernameProblemLanguageResultExecution timeMemory
976770vjudge1Watching (JOI13_watching)C++17
0 / 100
1095 ms604 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

int n;
vector <ll> jalur;

bool cek(int p, int q, int k, ll last) {
    if (last>=n) return true;
    if (p==0&&q==0) return false;
    bool a=false, b=false;
    if (q>0) {
        ll jq=jalur[last]-1+(k*2);
        ll akhir = upper_bound(jalur.begin(), jalur.end(), jq) - jalur.begin();
        a = cek(p, q-1, k, akhir);
    }
    if (a) return true;
    if (p>0) {
        ll jp=jalur[last]-1+k;
        ll akhir = upper_bound(jalur.begin(), jalur.end(), jp) - jalur.begin();
        b = cek(p-1, q, k, akhir);
    }
    return a||b;
}

int main() {
    int p, q; cin >> n >> p >> q;
    for (int i=0;i<n;i++) {
        ll x; cin >> x;
        jalur.push_back(x);
    }
    sort(jalur.begin(), jalur.end());
    ll kiri=1, kanan = 1e9, mid, ans=1;
    while (kiri<=kanan) {
        mid = (kiri+kanan)/2;
        if (cek(p, q, mid, 0)) {
            ans = mid;
            kanan = mid-1;
        } else {
            kiri = mid+1;
        }
    }
    cout << ans << endl;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...