제출 #1244522

#제출 시각아이디문제언어결과실행 시간메모리
1244522im2xtremeNile (IOI24_nile)C++20
6 / 100
2093 ms4680 KiB
#include "nile.h"
#include <bits/stdc++.h>
using namespace std;

struct Artifact {
    int id;
    int weight;
    int cost_alone;
    int cost_pair;
    int savings;
};

bool compare_artifacts(const Artifact& a, const Artifact& b) {
    if (a.savings != b.savings) {
        return a.savings > b.savings;
    } else {
        return a.weight < b.weight;
    }
}

vector<long long> calculate_costs(vector<int> W, vector<int> A, vector<int> B, vector<int> E) {
    int N = W.size();
    int Q = E.size();

    vector<Artifact> artifacts(N);
    for (int i = 0; i < N; i++) {
        artifacts[i] = {i, W[i], A[i], B[i], A[i] - B[i]};
    }

    sort(artifacts.begin(), artifacts.end(), compare_artifacts);

    vector<long long> R(Q);

    for (int q = 0; q < Q; q++) {
        int D = E[q];
        vector<bool> used(N, false);
        long long total_cost = 0;

        for (int i = 0; i < N; i++) {
            if (used[i]) continue;

            int best_match = -1;
            for (int j = i + 1; j < N; j++) {
                if (used[j]) continue;
                if (abs(artifacts[i].weight - artifacts[j].weight) <= D) {
                    best_match = j;
                    break;
                }
            }

            if (best_match != -1) {
                total_cost += artifacts[i].cost_pair + artifacts[best_match].cost_pair;
                used[i] = true;
                used[best_match] = true;
            } else {
                total_cost += artifacts[i].cost_alone;
                used[i] = true;
            }
        }

        R[q] = total_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...