#include <bits/stdc++.h>
using namespace std;
// #define int long long
const int N = 2005;
pair<int, int> dp[N][2];
int a[N];
int n, p, q;
inline bool check(int w) {
for (int i = 1; i <= n; i++) {
dp[i][0] = make_pair((int)1e6, (int)1e6);
dp[i][1] = make_pair((int)1e6, (int)1e6);
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
if (a[i] - a[j] + 1 <= w) {
if (dp[j-1][0].first + 1 < min(p+1, dp[i][0].first)) {
dp[i][0] = dp[j-1][0];
dp[i][0].first++;
}
if (dp[j-1][1].first + 1 < min(p+1, dp[i][0].first)) {
dp[i][0] = dp[j-1][1];
dp[i][0].first++;
}
}
if (a[i] - a[j] + 1 <= 2*w) {
if (dp[j-1][0].second + 1 < min(p+1, dp[i][1].second)) {
dp[i][1] = dp[j-1][0];
dp[i][1].second++;
}
if (dp[j-1][1].second + 1 < min(p+1, dp[i][1].second)) {
dp[i][1] = dp[j-1][1];
dp[i][1].second++;
}
}
}
}
if (dp[n][0].first >= 1e6 && dp[n][1].second >= 1e6) return 0;
return 1;
}
int bs() {
int l = 0, r = 1e9;
while (l <= r) {
int mid = (l+r)/2;
if (check(mid)) r = mid - 1;
else l = mid + 1;
}
}
signed main() {
cin.tie(0)->sync_with_stdio(false);
cin >> n >> p >> q;
for (int i = 1; i <= n; i++) cin >> a[i];
sort(a+1, a+n+1);
cout << bs();
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
watching.cpp: In function 'int bs()':
watching.cpp:47:1: warning: no return statement in function returning non-void [-Wreturn-type]
47 | }
| ^
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |