Submission #1281701

#TimeUsernameProblemLanguageResultExecution timeMemory
1281701dhuyyyyWatching (JOI13_watching)C++20
100 / 100
551 ms31844 KiB
#include<bits/stdc++.h> #define fi first #define se second #define int long long using namespace std; using ll = long long; using ii = pair<int, int>; using aa = array<int,3>; const int N = 2005; int n, p, q, ans; int a[N], dp[N][N]; bool ok(int mid){ dp[0][0] = 0; for (int used = 0; used <= min(n,p); used++){ int sid = 1; int lid = 1; for (int i = 1; i <= n; i++){ dp[i][used] = 1e9; while (sid <= n && a[sid] <= a[i] - mid){ sid++; } while (lid <= n && a[lid] <= a[i] - mid * 2){ lid++; } if (used == 0) dp[i][used] = dp[lid - 1][used] + 1; else{ dp[i][used] = min({dp[lid - 1][used] + 1,dp[sid - 1][used - 1]}); } } } for (int i = 0; i <= min(n,p); i++){ if (dp[n][i] <= q) return 1; } return 0; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL); cin >> n >> p >> q; for (int i = 1; i <= n; i++) cin >> a[i]; sort(a+1,a+1+n); int l = 1, r = (int)1e9; while (l <= r){ int mid = (l + r) >> 1; if (ok(mid)){ ans = mid; r = mid - 1; } else l = mid + 1; } cout << ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...