# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
223546 | Ruxandra985 | Stove (JOI18_stove) | C++14 | 46 ms | 2816 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#define DIMN 100010
using namespace std;
long long dp[DIMN];
int cnt[DIMN] , v[DIMN];
priority_queue <pair <long long , int> > h;
void solve (long long cost , int n){
int i , mini = -v[1] , cmin = 0;
for (i = 1 ; i <= n ; i++){
dp[i] = cost + mini + v[i] + 1;
cnt[i] = cmin + 1;
if (dp[i] > cost + dp[i - 1] + 1){
dp[i] = cost + dp[i - 1] + 1;
cnt[i] = 1 + cnt[i - 1];
}
if (dp[i] - v[i + 1] < mini){
mini = dp[i] - v[i + 1];
cmin = cnt[i];
}
}
}
int main()
{
FILE *fin = stdin;
FILE *fout = stdout;
int n , k , i;
long long st , dr , mid;
fscanf (fin,"%d%d",&n,&k);
for (i = 1 ; i <= n ; i++)
fscanf (fin,"%d",&v[i]);
st = 0;
dr = 1000000000000000000LL;
while (st <= dr){
mid = (st + dr) / 2;
solve(mid , n);
if (cnt[n] > k)
st = mid + 1;
else
dr = mid - 1;
}
//st = max(st - 1 , 0LL);
solve(st , n);
fprintf (fout,"%lld" , dp[n] - 1LL * k * st);
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |