제출 #1177220

#제출 시각아이디문제언어결과실행 시간메모리
1177220madamadam3나일강 (IOI24_nile)C++20
0 / 100
84 ms17856 KiB
#include "nile.h"
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
using vi = vector<int>;

// input
// W[i] = weight of artifact i
// A[i] = cost of transporting artifact i by itself
// B[i] = cost of transporting artifact i with another artifact
// E[j] = maximum weight different for artifacts going together for query j

// output
// R[i] = min cost of transporting all artifacts, when D = R[j]

vector<ll> calculate_costs(vi W, vi A, vi B, vi E) {
  int N = W.size(), Q = E.size();
  vector<ll> R(Q, 0);

  vector<int> indices(N); iota(indices.begin(), indices.end(), 0);
  sort(indices.begin(), indices.end(), [&](const auto &a, const auto &b) {
    return W[a] <= W[b];
  });
  // reverse(indices.begin(), indices.end());

  for (int j = 0; j < Q; j++) {
    cout << "D = " << E[j] << "\n";
    vector<int> cur = indices;
    ll cost = 0;

    while (cur.size() > 1) {
      int top = cur.back();
      cur.pop_back();

      if (abs(W[top] - W[cur.back()]) <= E[j]) {
        cost += B[top] + B[cur.back()];
        cout << "Combine item " << top << " and item " << cur.back() << " for a cost of " << B[top] + B[cur.back()] << "\n";
        cur.pop_back();
      } else {
        cout << "Use item " << top << " by itself, costing " << A[top] << "\n";
        cost += A[top];
      }
    }
    if (cur.size() == 1) {
      cout << "Use item " << cur.back() << " by itself, costing " << A[cur.back()] << "\n";
      cost += A[cur.back()];
    }

    cout << "Total cost is: " << cost << "\n";
    R[j] = cost;
  }

  return R;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...