# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
98766 | 2019-02-25T17:12:54 Z | figter001 | 구경하기 (JOI13_watching) | C++14 | 2 ms | 384 KB |
#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(){ #ifndef ONLINE_JUDGE freopen("input.txt","r",stdin); #endif 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; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 2 ms | 384 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 2 ms | 384 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |