Submission #1279970

#TimeUsernameProblemLanguageResultExecution timeMemory
1279970GoBananas69Nile (IOI24_nile)C++20
0 / 100
2095 ms4908 KiB
#include <algorithm>
#include <cmath>
#include <iostream>
#include <vector>
typedef long long ll;
using namespace std;

ll solve(vector<pair<ll, ll>> &items, vector<ll> &w, ll d) {
    ll n = items.size();
    vector<bool> ok(n, false);
    ll res = 0;
    for (int i = 0; i < n; ++i) {
        int l = i + 1;
        int r = upper_bound(w.begin(), w.end(), w[i] + d) - w.begin() - 1;
        bool found = false;
        ll mx = 0, idx = i;
        for (int j = l; j <= r; ++j) {
            if (ok[j]) continue;
            found = true;
            if (items[j].second > mx) {
                mx = items[j].second;
                idx = j;
            }
        }
        if (!found) {
            res += items[i].second;
            ok[i] = true;
        } else {
            ok[i] = true;
            ok[idx] = true;
        }
    }
    return res;
}

vector<ll> calculate_costs(vector<int> W, vector<int> a, vector<int> b, vector<int> e) {
    ll n = a.size();
    ll q = e.size();

    vector<ll> ans(q), w(n);
    vector<pair<ll, ll>> items(n);
    ll sum = 0;
    for (ll i = 0; i < n; ++i) {
        items[i] = {(ll)W[i], (ll)(a[i] - b[i])};
        sum += b[i];
    }
    sort(items.begin(), items.end());
    for (ll i = 0; i < n; ++i) {
        w[i] = items[i].first;
    }
    for (int i = 0; i < q; ++i) ans[i] = sum + solve(items, w, e[i]);
    return ans;
}
#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...