제출 #93499

#제출 시각아이디문제언어결과실행 시간메모리
93499tincamateiBoxes with souvenirs (IOI15_boxes)C++14
100 / 100
633 ms196088 KiB
#include <bits/stdc++.h>
#include "boxes.h"

const int MAX_N = 10000000;

long long pref[1+MAX_N], suff[1+MAX_N];

long long cost(int i, int j, int l, int k, int n) {
  return pref[i] + suff[j] + (long long)(n - i - j + k - 1) / k * l;
}

long long delivery(int n, int k, int l, int p[]) {
  long long rez = 1LL << 60;

  for(int i = 1; i <= n; ++i) {
    if(i - k >= 0)
      pref[i] = pref[i - k];
    pref[i] = pref[i] + p[i - 1] * 2;
  }

  for(int i = 1; i <= n; ++i) {
    if(i - k >= 0)
      suff[i] = suff[i - k];
    suff[i] = suff[i] + (l - p[n - i]) * 2;
  }

  if(k > n)
    return l;

  for(int i = 0; i <= n; ++i) {
    rez = std::min(rez, cost(i, n - i, l, k, n));
    if(n - i - k >= 0)
      rez = std::min(rez, cost(i, n - i - k, l, k, n));
  }

  return rez;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...