Submission #1212191

#TimeUsernameProblemLanguageResultExecution timeMemory
1212191kunzaZa183Boxes with souvenirs (IOI15_boxes)C++20
10 / 100
1 ms328 KiB
#include "boxes.h"

#include <bits/stdc++.h>
using namespace std;

long long delivery(int N, int K, int L, int p[]) {
  vector<int> left, right;
  for (int i = 0; i < N; i++)
    if (p[i] <= L / 2) {
      left.push_back(p[i]);
    } else
      right.push_back(p[i]);

  // cerr << left.size() << " " << right.size() << "\n";

  // cout << (left.empty() ? 0 : left.back() * 2) +
  //             (right.empty() ? 0 : (N - right.front()) * 2)
  //      << "\n";

  // return min(L, (left.empty() ? 0 : left.back() * 2) +
  //                   (right.empty() ? 0 : (L - right.front()) * 2));

  long long ans = 0;
  reverse(left.begin(), left.end());
  for (int i = 0; i + K <= left.size(); i += K) {
    ans += 2 * left[i];
  }
  for (int i = 0; i + K <= right.size(); i += K) {
    ans += 2 * (L - right[i]);
  }

  reverse(left.begin(), left.end());
  reverse(right.begin(), right.end());

  vector<int> newl, newr;
  for (int i = 0; i < left.size() % K; i++) newl.push_back(left[i]);
  for (int i = 0; i < right.size() % K; i++) newr.push_back(right[i]);
  reverse(newr.begin(), newr.end());

  // cout << ans << "\n";

  assert(newl.empty() && newr.empty());

  return ans;

  if (newl.size() + newr.size() <= K) {
    return ans + min(L, (newl.empty() ? 0 : newl.back() * 2) +
                            (newr.empty() ? 0 : (L - newr.front()) * 2));
  } else {
    vector<int> all;
    for (auto a : newl) all.push_back(a);
    for (auto a : newr) all.push_back(a);

    return ans + L + 2 * min(all[all.size() - K], (L - all[K]));
  }
}
#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...