제출 #1261893

#제출 시각아이디문제언어결과실행 시간메모리
1261893reginox구경하기 (JOI13_watching)C++20
100 / 100
749 ms8520 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;ll a[N]; int dp[N][N]; bool ck(ll d){ dp[0][0] = 0; for(int i = 0; i <= p; i++){ for(int j = 0; j <= q; j++){ dp[i][j] = 0; if(i > 0){ int last = dp[i-1][j]; int id = upper_bound(a+1,a+n+1,a[min(n, last+1)] + d-1)-a-1; dp[i][j] = max(dp[i][j], id); } if(j > 0){ int last = dp[i][j-1]; int id = upper_bound(a+1,a+n+1,a[min(n, last+1)]+ 2*d-1)-a-1; dp[i][j] = max(dp[i][j], id); } if(dp[i][j] >= n) return true; } } return false; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> p >> q; if(p + q >= n){ cout << 1; return 0; } p = min(p, n), q = min(q, n); for(int i = 1; i <= n; i++) cin >> a[i]; a[n+1] = a[n]; sort(a+1, a+n+1); int ans, L = 1, R = 1e9, mid; while(L <= R){ mid = (L+R)/2; if(ck(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...