Submission #419431

#TimeUsernameProblemLanguageResultExecution timeMemory
419431tengiz05Watching (JOI13_watching)C++17
100 / 100
816 ms15300 KiB
#include <bits/stdc++.h> int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n, p, q; std::cin >> n >> p >> q; std::vector<int> a(n); for (int i = 0; i < n; i++) { std::cin >> a[i]; } if (p + q >= n) { std::cout << 1 << "\n"; return 0; } sort(a.begin(), a.end()); auto check = [&](int len) { std::vector<std::vector<int>> dp(n + 1, std::vector<int>(q + 1, 1e9)); dp[0][0] = 0; int p1 = 1, p2 = 1; for (int i = 1; i <= n; i++) { while (a[i - 1] - a[p1 - 1] >= len) p1++; while (a[i - 1] - a[p2 - 1] >= 2 * len) p2++; for (int Q = 0; Q <= q; Q++) { dp[i][Q] = std::min(dp[i][Q], dp[p1 - 1][Q] + 1); if (Q) { dp[i][Q] = std::min(dp[i][Q], dp[i][Q - 1]); dp[i][Q] = std::min(dp[i][Q], dp[p2 - 1][Q - 1]); } } } return dp[n][q] <= p; }; // for (int i = 1; i <= 17; i++) std::cerr << check(i) << "\n"; // return 0; int l = 0, r = 1000000007; while (l + 1 < r) { int mid = (l + r) / 2; if (check(mid)) { r = mid; } else { l = mid; } } std::cout << r << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...