제출 #1177220

#제출 시각아이디문제언어결과실행 시간메모리
1177220madamadam3Nile (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...