# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
494581 | 2021-12-15T18:52:48 Z | aris12345678 | Stove (JOI18_stove) | C++14 | 0 ms | 204 KB |
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int mxN = 100005; int a[mxN]; bool check(ll md, int n, int k) { int cnt = 0, start = 0; for(int i = 0; i < n; i++) { if(a[i]-a[start] > md) { start = i; cnt++; } } if(start != n) cnt++; return cnt <= k; } int main() { int n, k; scanf("%d %d", &n, &k); for(int i = 0; i < n; i++) scanf("%d", &a[i]); ll st = 0, en = LLONG_MAX, md, diff; while(st <= en) { md = (st+en)/2; if(check(md, n, k)) diff = md, en = md-1; else st = md+1; } // cout << diff << "\n"; int start = 0; ll ans = 0; for(int i = 0; i < n; i++) { if(a[i]-a[start] > diff) { ans += 1LL*(a[i-1]-a[start]+1); start = i; } } if(start != n) ans += 1LL*(a[n-1]-a[start]+1); printf("%lld\n", ans); return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 204 KB | Output is correct |
2 | Incorrect | 0 ms | 204 KB | Output isn't correct |
3 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 204 KB | Output is correct |
2 | Incorrect | 0 ms | 204 KB | Output isn't correct |
3 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 204 KB | Output is correct |
2 | Incorrect | 0 ms | 204 KB | Output isn't correct |
3 | Halted | 0 ms | 0 KB | - |