/**
* 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;
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] + m - 1) - arr, y - 1, z) // use short
|| dp(upper_bound(arr, arr + n, arr[x] + 2 * m - 1) - arr, y, z - 1);
}
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;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
204 KB |
Output is correct |
2 |
Correct |
0 ms |
204 KB |
Output is correct |
3 |
Correct |
0 ms |
316 KB |
Output is correct |
4 |
Correct |
0 ms |
204 KB |
Output is correct |
5 |
Correct |
0 ms |
204 KB |
Output is correct |
6 |
Correct |
1 ms |
204 KB |
Output is correct |
7 |
Correct |
1 ms |
204 KB |
Output is correct |
8 |
Correct |
1 ms |
332 KB |
Output is correct |
9 |
Correct |
1 ms |
332 KB |
Output is correct |
10 |
Correct |
16 ms |
580 KB |
Output is correct |
11 |
Correct |
20 ms |
588 KB |
Output is correct |
12 |
Correct |
4 ms |
460 KB |
Output is correct |
13 |
Correct |
0 ms |
204 KB |
Output is correct |
14 |
Correct |
1 ms |
204 KB |
Output is correct |
15 |
Correct |
1 ms |
204 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
0 ms |
204 KB |
Output is correct |
3 |
Correct |
1 ms |
332 KB |
Output is correct |
4 |
Correct |
1 ms |
332 KB |
Output is correct |
5 |
Correct |
0 ms |
332 KB |
Output is correct |
6 |
Correct |
1 ms |
332 KB |
Output is correct |
7 |
Correct |
8 ms |
460 KB |
Output is correct |
8 |
Execution timed out |
1096 ms |
87708 KB |
Time limit exceeded |
9 |
Halted |
0 ms |
0 KB |
- |