Submission #518839

#TimeUsernameProblemLanguageResultExecution timeMemory
518839MarceantasyWatching (JOI13_watching)C++17
100 / 100
641 ms16040 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ar array const int mxN = 2005, M = 1e9+7; int n, p, q, a[mxN]; int nxt1[mxN], nxt2[mxN]; int dp[mxN][mxN]; bool trial(int pos){ for(int i = 0; i<n; ++i){ nxt1[i] = (int)(lower_bound(a, a+n, a[i]+pos)-a); nxt2[i] = (int)(lower_bound(a, a+n, a[i]+2*pos)-a); } nxt1[n] = nxt2[n] = n; for(int i = p; i>=0; --i){ for(int j = q; j>=0; --j){ if(i == p && j == p) continue; int ans = 0; if(i != p){ ans = max(ans, nxt1[dp[i+1][j]]); } if(j != q){ ans = max(ans, nxt2[dp[i][j+1]]); } dp[i][j] = ans; } } return dp[0][0] >= n; } int main(){ #ifdef _DEBUG // freopen("input.txt", "r", stdin); // freopen("output.txt", "w", stdout); #endif std::ios_base::sync_with_stdio(false); std::cin.tie(0); std::cout.tie(0); cin >> n >> p >> q; for(int i = 0; i<n; ++i){ cin >> a[i]; } p = min(p, n); q = min(q, n); sort(a, a+n); int l = 0, r = 1e9; while(l<r){ int mid = (l+r)/2; if(trial(mid)) r = mid; else l = mid+1; } cout << l << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...