제출 #1156137

#제출 시각아이디문제언어결과실행 시간메모리
1156137tvgkWatching (JOI13_watching)C++20
100 / 100
556 ms16176 KiB
#include<bits/stdc++.h> using namespace std; #define task "a" #define se second #define fi first #define ll long long #define ii pair<ll, ll> const long mxN = 2e3 + 7, inf = 1e9 + 7; int n, mn, mx, a[mxN], dp[mxN][mxN]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); //freopen(task".INP", "r", stdin); //freopen(task".OUT", "w", stdout); cin >> n >> mn >> mx; for (int i = 1; i <= n; i++) cin >> a[i]; sort(a + 1, a + n + 1); mx = min(n, mx); int l = 1, r = inf, ans = inf; while (l <= r) { int mid = (l + r) / 2; for (int i = 1; i <= n + 1; i++) { for (int j = 0; j <= mx; j++) dp[i][j] = -inf; } dp[1][mx] = mn; for (int i = 1; i <= n; i++) { for (int j = 0; j <= mx; j++) { if (dp[i][j] == -inf) continue; if (j) { int tmp = upper_bound(a + 1, a + n + 1, a[i] + 2 * mid - 1) - a; dp[tmp][j - 1] = max(dp[tmp][j - 1], dp[i][j]); } if (dp[i][j]) { int tmp = upper_bound(a + 1, a + n + 1, a[i] + mid - 1) - a; dp[tmp][j] = max(dp[tmp][j], dp[i][j] - 1); } } } bool con = 0; for (int i = 0; i <= mx; i++) con |= (dp[n + 1][i] != -inf); if (con) { ans = mid; r = mid - 1; } else l = mid + 1; } cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...