Submission #1184611

#TimeUsernameProblemLanguageResultExecution timeMemory
1184611peteza구경하기 (JOI13_watching)C++20
100 / 100
194 ms16196 KiB
#include <bits/stdc++.h> using namespace std; int n, p, q; int dp[2005][2005]; int dep[2005]; int longestjump[2005][2]; int main() { cin.tie(0) -> sync_with_stdio(0); cin >> n >> p >> q; for(int i=1;i<=n;i++) { cin >> dep[i]; } int l = 1, r = 1000000003, mid; p = min(p, 2001); q = min(q, 2001); sort(dep+1, dep+n+1); while(l <= r) { mid = (l+r) >> 1; memset(dp, 0, sizeof dp); for(int i=1;i<=n;i++) { longestjump[i][0] = (upper_bound(dep+1, dep+n+1, dep[i] + mid - 1) - dep) - 1; longestjump[i][1] = (upper_bound(dep+1, dep+n+1, dep[i] + min(1010000000, 2*mid - 1)) - dep) - 1; } for(int i=0;i<=p;i++) { for(int j=0;j<=q;j++) { if(dp[i][j] == n) { dp[i+1][j] = dp[i][j+1] = n; continue; } dp[i+1][j] = max(dp[i+1][j], longestjump[dp[i][j]+1][0]); dp[i][j+1] = max(dp[i][j+1], longestjump[dp[i][j]+1][1]); } } if(dp[p][q] < n) l = mid + 1; else r = mid - 1; } cout << l; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...