Submission #564893

#TimeUsernameProblemLanguageResultExecution timeMemory
564893SSRSWatching (JOI13_watching)C++14
50 / 100
1065 ms12268 KiB
#include <iostream> #include <vector> #include <algorithm> //#include <bits/stdc++.h> using namespace std; const int INF = 1000000; int main(){ int N, P, Q; cin >> N >> P >> Q; P = min(P, N); Q = min(Q, N); vector<int> A(N); for (int i = 0; i < N; i++){ cin >> A[i]; } sort(A.begin(), A.end()); int tv = 500000000, fv = 0; while (tv - fv > 1){ int mid = (tv + fv) / 2; vector<int> R1(N + 1), R2(N + 1); for (int i = 0; i < N; i++){ R1[i] = lower_bound(A.begin(), A.end(), A[i] + mid) - A.begin(); R2[i] = lower_bound(A.begin(), A.end(), A[i] + mid * 2) - A.begin(); } R1[N] = N; R2[N] = N; vector<vector<int>> dp(N + 1, vector<int>(P + 1, INF)); dp[0][0] = 0; for (int i = 0; i <= N; i++){ for (int j = 0; j <= P; j++){ if (j < P){ dp[R1[i]][j + 1] = min(dp[R1[i]][j + 1], dp[i][j]); } dp[R2[i]][j] = min(dp[R2[i]][j], dp[i][j] + 1); } } if (dp[N][P] <= Q){ tv = mid; } else { fv = mid; } } cout << tv << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...