Submission #651642

#TimeUsernameProblemLanguageResultExecution timeMemory
651642Koful123Watching (JOI13_watching)C++17
100 / 100
429 ms15468 KiB
#include <bits/stdc++.h> using namespace std; #define endl "\n" #define pb push_back #define ff first #define ss second #define mod 1000000007 #define all(x) (x).begin(), (x).end() #define rall(x) (x).rbegin(), (x).rend() int n; vector<int> v,a,b; vector<vector<int>> dp; int f(int pos,int q,int w){ if(q < 0) return 2037; if(pos >= n) return 0; if(dp[pos][q] != 2037) return dp[pos][q]; dp[pos][q] = min(f(a[pos],q,w) + 1,f(b[pos],q-1,w)); return dp[pos][q]; } void solve(){ int p,q; cin >> n >> p >> q; v.assign(n,0),a.assign(n,0),b.assign(n,0); for(int i=0;i<n;i++){ cin >> v[i]; } if(p + q >= n){ cout << 1 << endl; return; } auto check = [&](int m){ dp.assign(n,vector<int>(q+1,2037)); for(int i=0;i<n;i++){ a[i] = lower_bound(all(v), v[i] + m) - v.begin(); b[i] = lower_bound(all(v), v[i] + 2*m) - v.begin(); } return f(0,q,m) <= p; }; sort(all(v)); int l = 1,r = 1e9; while(l < r){ int m = (l + r) / 2; if(check(m)) r = m; else l = m + 1; } cout << l << endl; } signed main(){ ios::sync_with_stdio(0); cin.tie(0); int t = 1; // cin >> t; while(t--) solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...