Submission #492879

#TimeUsernameProblemLanguageResultExecution timeMemory
492879alextodoranWatching (JOI13_watching)C++17
100 / 100
83 ms14132 KiB
/** ____ ____ ____ ____ ____ ||a |||t |||o |||d |||o || ||__|||__|||__|||__|||__|| |/__\|/__\|/__\|/__\|/__\| **/ #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N_MAX = 2000; int N, P, Q; int A[N_MAX + 2]; int dp[N_MAX + 2][N_MAX + 2]; bool solve (int w) { int jp = 0, jq = 0; for (int i = 1; i <= N; i++) { while (A[i] - A[jp] + 1 > w) { jp++; } while (A[i] - A[jq] + 1 > w * 2) { jq++; } for (int cntp = 0; cntp <= min(i, P); cntp++) { /// Use a large camera (Q) dp[i][cntp] = dp[jq - 1][cntp] + 1; /// Use a small camera (P) if (cntp > 0) { dp[i][cntp] = min(dp[i][cntp], dp[jp - 1][cntp - 1]); } } } for (int cntp = 0; cntp <= min(N, P); cntp++) { if (dp[N][cntp] <= Q) { return true; } } return false; } int main () { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> N >> P >> Q; for (int i = 1; i <= N; i++) { cin >> A[i]; } sort(A + 1, A + N + 1); int l = 1, r = (int) 1e9; while (l < r) { int mid = (l + r) / 2; if (solve(mid) == true) { r = mid; } else { l = mid + 1; } } cout << l << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...