Submission #1328061

#TimeUsernameProblemLanguageResultExecution timeMemory
1328061goshgar_468Watching (JOI13_watching)C++20
100 / 100
608 ms30364 KiB
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;

# define int long long
# define QR ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
# define endl '\n'
# define all(x) x.begin(), x.end()
# define ff first
# define ss second
# define pb push_back

const int N = 10001;
const int mod = 1e9;
const int inf = 2e9;

int n, p, q;
int a[N];

bool check(int x)
{
    vector<vector<int>> dp(n + 1, vector<int>(p + 1, inf));
    vector<int> k(n + 1, 0);
    vector<int> b(n + 1, 0);
    for (int i = 0; i < n; ++i){
        k[i] = upper_bound(a + 1, a + n + 1, a[i + 1] + x - 1) - a - 1;
        b[i] = upper_bound(a + 1, a + n + 1, a[i + 1] + 2 * x - 1) - a - 1;
    }
    dp[0][0] = 0;
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j <= p; ++j)
        {
            if (j < p)
                dp[k[i]][j + 1] = min(dp[k[i]][j + 1], dp[i][j]);
            dp[b[i]][j] = min(dp[b[i]][j], dp[i][j] + 1);
        }
    }
    int ans = 0;
    for (int j = 0; j <= p; ++j)
        if (dp[n][j] <= q)
            ans = 1;
    return ans;
}

void CASE() {
    cin >> n >> p >> q;
    a[0] = 1;
    for (int i = 1; i <= n; ++i)
        cin >> a[i];
    sort(a + 1, a + n + 1);
    if (p + q >= n)
    {
        cout << 1 << '\n';
        return;
    }
    int l = 1, r = 1e9 ;
    int res = 1e9;
    while (l <= r){
        int mid = l + (r - l) / 2;
        if (check(mid)){
            res = mid;
            r = mid - 1;
        }
        else
            l = mid + 1;
    }
    cout << res << endl ;
}

signed main() {
    QR;
    int TESTS = 1;
    // cin >> TESTS;
    for (int TEST = 1; TEST <= TESTS; TEST++) {
        // cout << "Case #TEST << ": " ;
        CASE();
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...