Submission #1239477

#TimeUsernameProblemLanguageResultExecution timeMemory
1239477minhpkWatching (JOI13_watching)C++20
100 / 100
170 ms15420 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const ll INF = (ll)1e18; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int a, b, c; cin >> a >> b >> c; vector<ll> z(a+1); for(int i = 1; i <= a; i++){ cin >> z[i]; } if ((ll)b + c >= a){ cout << 1 << "\n"; return 0; } sort(z.begin()+1, z.end()); vector<vector<int>> dp(a+1, vector<int>(b+1, INT_MAX)); auto check = [&](ll w){ for(int i = 0; i <= a; i++) for(int j = 0; j <= b; j++) dp[i][j] = INT_MAX; dp[0][0] = 0; for(int i = 1; i <= a; i++){ int l = lower_bound(z.begin()+1, z.begin()+i+1, z[i] - w+1) - z.begin(); int k = lower_bound(z.begin()+1, z.begin()+i+1, z[i] - 2*w+1) - z.begin(); for(int j = 0; j <= b; j++){ if (j > 0 && dp[l-1][j-1] != INT_MAX){ dp[i][j] = min(dp[i][j], dp[l-1][j-1]); } if (dp[k-1][j] != INT_MAX){ dp[i][j] = min(dp[i][j], dp[k-1][j] + 1); } } } for(int j = 0; j <= b; j++){ if (dp[a][j] <= c) return true; } return false; }; ll lo = 0, hi = (ll)1e9, ans = hi; while(lo <= hi){ ll mid = lo + (hi - lo)/2; if (check(mid)){ ans = mid; hi = mid - 1; } else { lo = mid + 1; } } cout << ans << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...