Submission #419418

#TimeUsernameProblemLanguageResultExecution timeMemory
419418tengiz05구경하기 (JOI13_watching)C++17
50 / 100
191 ms262148 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<std::vector<int>>> dp(n + 1, std::vector<std::vector<int>>(p + 1, std::vector<int>(q + 1))); dp[0][0][0] = 1; int p1 = 1, p2 = 1; // std::cout << "\n"; // std::cout << len << "\n"; 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++; // std::cerr << i << " " << p1 << " " << p2 << "\n"; for (int P = 0; P <= p; P++) { for (int Q = 0; Q <= q; Q++) { if (P) { dp[i][P][Q] += dp[i][P - 1][Q]; dp[i][P][Q] += dp[p1 - 1][P - 1][Q]; } if (Q) { dp[i][P][Q] += dp[i][P][Q - 1]; dp[i][P][Q] += dp[p2 - 1][P][Q - 1]; } } } } return dp[n][p][q]; }; // 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...