Submission #98767

#TimeUsernameProblemLanguageResultExecution timeMemory
98767figter001Watching (JOI13_watching)C++14
100 / 100
872 ms16248 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; typedef unsigned long long ull; const ll oo = 1e18; const int mod = 1e9+7; const int nax = 2020; int n,s,b; int dp[nax][nax]; vector<int> a; bool can(int w){ for(int i=0;i<n;i++) for(int j=0;j<n;j++) dp[i][j] = 2e9; int to = -1,u = 0; for(int i=0;i<n;i++){ if(a[i] > to){ to = a[i] + w - 1; u++; } dp[i][0] = u; } int idx = 0,idx2=0; for(int i=0;i<n;i++){ for(int j=1;j<=b;j++){ int cur = a[i] - 2*w + 1,at; if(cur <= 0)dp[i][j] = 0; else{ while(idx < n && cur > a[idx]) idx++; at = idx; if(at == 0){ dp[i][j] = 0; }else{ at--; dp[i][j] = min(dp[i][j],dp[at][j-1]); // if(i)dp[i][j] = min(dp[i][j],dp[i-1][j]+1); } } cur = a[i] - w + 1; if(cur <= 0)dp[i][j] = 0; else{ while(idx2 < n && cur > a[idx2]) idx2++; at = idx2; if(at == 0){ dp[i][j] = 0; }else{ at--; dp[i][j] = min(dp[i][j],dp[at][j]+1); // if(i)dp[i][j] = min(dp[i][j],dp[i-1][j]+1); } } } } return dp[n-1][b] <= s; } int main(){ cin>>n>>s>>b; s = min(s,n); b = min(b,n); a.resize(n); for(int i=0;i<n;i++)cin>>a[i]; sort(a.begin(),a.end()); int md,lo=1,hi=1e9,ans = 0; while(lo <= hi){ md = (lo + hi)/2; if(can(md)){ ans = md; hi = md-1; }else lo = md+1; } cout << ans << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...