Submission #909576

#TimeUsernameProblemLanguageResultExecution timeMemory
909576schzeeyWatching (JOI13_watching)C++14
0 / 100
1020 ms6232 KiB
#include <bits/stdc++.h> using namespace std; int n, a, b; vector <int> arr; bool check(int ans){ vector<vector<int>> dp(a+1, vector<int>(n+1, 0)); for (int i = 0; i < a+1; ++i){ for (int j = 1; j <= n; ++j){ int pa = j, pb = j; do pa--; while(arr[j]-arr[pa] <= ans); do pb--; while(arr[j]-arr[pb] <= 2*ans); if (i == 0) dp[i][j] = dp[i][pb]+1; else dp[i][j] = min(dp[i][pb]+1, dp[i-1][pa]); } } return dp[a][n] <= b; } int main(){ cin >> n >> a >> b; arr.resize(n+1); for (int i = 1; i <= n; ++i) cin >> arr[i]; if (a+b >= n) return cout<<1, 0; arr[0] = -1e9; sort(arr.begin(), arr.end()); //for (auto e: arr) cout << e << " "; int lf = 0, ri = 1e9; while (lf <= ri){ int mid = (lf+ri)/2; //cout << mid << " "; if (check(mid)) ri = mid-1; else lf = mid+1; } cout << lf+1; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...