Submission #1311687

#TimeUsernameProblemLanguageResultExecution timeMemory
1311687Zone_zoneeWatching (JOI13_watching)C++20
100 / 100
123 ms16180 KiB
#include <bits/stdc++.h> using namespace std; const int N = 2e3+10; int n, p, q, a[N]; int dp[N][N]; bool valid(int w){ for(int i = 1; i <= n; ++i){ int large = upper_bound(a+1, a+n+1, a[i]-2*w) - (a+1); int small = upper_bound(a+1, a+n+1, a[i]-w) - (a+1); for(int j = 0; j <= q; ++j){ dp[i][j] = 1e9; dp[i][j] = min( (large == 0 || j == 0) ? (j == 0 ? N : 0) : dp[large][j-1], (small == 0) ? 1 : dp[small][j]+1); } } return dp[n][q] <= p; } int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> p >> q; if(p+q >= n){ cout << 1 << '\n'; return 0; } for(int i = 1; i <= n; ++i) cin >> a[i]; sort(a+1, a+n+1); int l = 1, r = 1e9; while(l < r){ int mid = (l+r)>>1; if(valid(mid)) r = mid; else l = mid+1; } cout << r << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...