Submission #1272558

#TimeUsernameProblemLanguageResultExecution timeMemory
1272558reginoxWatching (JOI13_watching)C++20
100 / 100
483 ms16164 KiB
#include <bits/stdc++.h> #define ll long long #define ld long double #define all(v) begin(v), end(v) #define pi pair<int, int> #define vi vector<int> using namespace std; const int N = 2e3+3; int n, p, q, a[N]; int dp[N][N], jp[N][2]; bool ck(int x){ memset(dp, 0, sizeof(dp)); a[n+1] = 1e9; // cout << x << "\n"; for(int i = 1; i <= n; i++){ jp[i][0] = lower_bound(a+1,a+n+1,a[i]+x)-a-1; jp[i][1] = lower_bound(a+1,a+n+1,a[i]+x*2)-a-1; } int mx = 0; for(int i = 0; i <= min(p, n); i++){ for(int j = 0; j <= min(q, n); j++){ if(i > 0){ int prv = dp[i-1][j]+1; dp[i][j] = max(dp[i][j], jp[prv][0]); } if(j > 0){ int prv = dp[i][j-1]+1; dp[i][j] = max(dp[i][j], jp[prv][1]); } mx = max(mx, dp[i][j]); // cout << dp[i][j] << " "; } // cout << "\n"; } if(mx >= n) return true; return false; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> p >> q; for(int i = 1; i <= n; i++) cin >> a[i]; sort(a+1,a+n+1); int l = 1, r = 5e8; while(l <= r){ int mid = (l+r)/2; if(ck(mid)) r = mid-1; else l = mid+1; } cout << l; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...