Submission #1074065

#TimeUsernameProblemLanguageResultExecution timeMemory
1074065jk_Boxes with souvenirs (IOI15_boxes)C++14
100 / 100
611 ms386396 KiB
#include "boxes.h"
#include <vector>
#include <limits>
#include <iostream>
#include <algorithm>
using namespace std;

long long delivery(int n, int k, int l, int p_[]) {
  vector<int> p(p_, p_+n);

  vector<long long> greedy_l;
  greedy_l.push_back(0);
  for (int i = 0; i < k; ++i)
    greedy_l.push_back(2*p[i]);
  for (int i = k; i < n; ++i)
    greedy_l.push_back(2*p[i] + greedy_l[i+1-k]);

  vector<long long> greedy_r;
  greedy_r.push_back(0);
  for (int i = 0; i < k; ++i)
    greedy_r.push_back(2*(l - p[n-i-1]));
  for (int i = k; i < n; ++i)
    greedy_r.push_back(2*(l - p[n-i-1]) + greedy_r[i+1-k]);
  reverse(greedy_r.begin(), greedy_r.end());

  long long best=numeric_limits<long long>::max();
  for (int i = 0; i <= n; ++i) {
    best=min(best, greedy_l[i] + greedy_r[i]);
  }
  for (int i = 0; i+k <= n; ++i) {
    best = min(best, greedy_l[i] + greedy_r[i+k] + l);
  }
  if (n <= k)
    best = min(best, (long long)l);

  return best;
}
#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...