Submission #485341

#TimeUsernameProblemLanguageResultExecution timeMemory
485341zhougzWatching (JOI13_watching)C++17
50 / 100
1098 ms162056 KiB
/** * author: chowgz * created: 06/11/2021 20:19:08 **/ #include <bits/stdc++.h> using namespace std; int n, p, q; const int MAXN = 2'000; int arr[MAXN + 5]; int m; unordered_map<long long, bool> mmap; long long hsh(int x, int y, int z) { return x * 3'000 * 3'000 + y * 3'000 + z; } bool dp(int x, int y, int z) { // x: considering arr[x], y: # short pieces left, z: # long pieces left #ifdef LOCAL cerr << "x: " << x << " y: " << y << " z: " << z << endl; #endif if (y < 0 || z < 0) { return false; } if (y + z >= n - x) { return true; } if (mmap.find(hsh(x, y, z)) != mmap.end()) { return mmap[hsh(x, y, z)]; } return mmap[hsh(x, y, z)] = dp(upper_bound(arr, arr + n, arr[x] + 2 * m - 1) - arr, y, z - 1) || dp(upper_bound(arr, arr + n, arr[x] + m - 1) - arr, y - 1, z); } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> p >> q; for (int i = 0; i < n; i++) { cin >> arr[i]; } if (p + q >= n) { cout << 1 << '\n'; return 0; } sort(arr, arr + n); int l = 1, r = 1'000'000'000; while (l != r) { m = (l + r) / 2; mmap.clear(); if (dp(0, p, q)) { r = m; } else { l = m + 1; } } cout << l << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...