Submission #1259687

#TimeUsernameProblemLanguageResultExecution timeMemory
1259687vietbachleonkroos2326나일강 (IOI24_nile)C++20
0 / 100
2096 ms3144 KiB
#include<bits/stdc++.h>
#define TIME (1.0* clock()/CLOCKS_PER_SEC)
#define pb push_back
#define eb emplace_back
#define id1 (id<<1)
#define id2 (id<<1)|1
#define ll long long
#define ii pair<int,int>
#define vi vector<int>
#define vii vector<pair<int,int>> 
#define vl vector<long long>
#define vll vector <pair<ll,ll>>
#define li pair<long long,int>
#define vil vector <pair<int,ll>>
#define db double
#define ff first
#define ss second
#define lb lower_bound
#define ub upper_bound
#define FOR(i, a, b) for (int i = (a); i <=(b); i++)
#define F0R(i, a) FOR(i, 0, a-1)
#define ROF(i, a, b) for (int i = (b); i >= (a); i--)
#define R0F(i, a) ROF(i, 0, a-1)
#define rep(a) F0R(_, a)
#define each(a, x) for (auto &a : x)
#define ALL(x) (x).begin(),(x).end()
#define pq priority_queue <li, vector <li>, greater <li>> 
using namespace std;


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<long long> res;

    for (int D : E) {
       
        vector<int> id(n);
        for (int i = 0; i < n; i++) id[i] = i;
        sort(id.begin(), id.end(), [&](int i, int j) {
            return W[i] < W[j];
        });

        vector<bool> paired(n, false);
        long long sum = 0;

       
        for (int i = 0; i < n; i++) {
            if (paired[id[i]]) continue; 

           
            int best_j = -1;
            int maxsav = -1;
            for (int j = i + 1; j < n && W[id[j]] - W[id[i]] <= D; j++) {
                if (!paired[id[j]]) {
                    int sav = (A[id[i]] - B[id[i]]) + (A[id[j]] - B[id[j]]);
                    if (sav > maxsav) {
                        maxsav = sav;
                        best_j = j;
                    }
                }
            }

            if (best_j != -1) {
                
                sum += B[id[i]] + B[id[best_j]];
                paired[id[i]] = paired[id[best_j]] = true;
            } else {
               
                sum += A[id[i]];
                paired[id[i]] = true;
            }
        }

        res.push_back(sum);
    }

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