Submission #934600

#TimeUsernameProblemLanguageResultExecution timeMemory
934600borisAngelovWatching (JOI13_watching)C++17
50 / 100
20 ms27224 KiB
#include <bits/stdc++.h> using namespace std; const int maxn = 505; int n, p, q; int a[maxn]; int findPos(int pos, int delta) { int l = 1; int r = pos; while (l <= r) { int mid = (l + r) / 2; if (a[pos] - a[mid] <= delta) { r = mid - 1; } else { l = mid + 1; } } return l; } bool dp[maxn][maxn][maxn]; int prvSmall[maxn]; int prvBig[maxn]; bool check(int w) { for (int i = 1; i <= n; ++i) { prvSmall[i] = findPos(i, w - 1); prvBig[i] = findPos(i, 2 * w - 1); } for (int i = 0; i <= p; ++i) { for (int j = 0; j <= q; ++j) { dp[0][i][j] = true; if (i + j >= 1) { dp[1][i][j] = true; } } } for (int pos = 2; pos <= n; ++pos) { for (int currp = 0; currp <= p; ++currp) { for (int currq = 0; currq <= q; ++currq) { dp[pos][currp][currq] = false; if (currp >= 1) { dp[pos][currp][currq] |= dp[pos][currp - 1][currq]; dp[pos][currp][currq] |= dp[prvSmall[pos] - 1][currp - 1][currq]; } if (currq >= 1) { dp[pos][currp][currq] |= dp[pos][currp][currq - 1]; dp[pos][currp][currq] |= dp[prvBig[pos] - 1][currp][currq - 1]; } } } } return dp[n][p][q]; } void fastIO() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); } int main() { fastIO(); cin >> n >> p >> q; for (int i = 1; i <= n; ++i) { cin >> a[i]; } sort(a + 1, a + n + 1); p = min(p, n); q = min(q, n); p = min(p, n - q); if (q == n || p == n) { cout << 1 << endl; return 0; } int l = 1; int r = (a[n] - a[1]) / (p + 2 * q); while (l <= r) { int mid = (l + r) / 2; if (check(mid) == true) { r = mid - 1; } else { l = mid + 1; } } cout << l << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...