124052024-12-16 22:46:24kukkermanBányász RPG (40 pont)cpp17Accepted 40/4028ms2700 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdint>

struct Alapanyag {
    int64_t tp_korlat;
    int64_t mennyiseg;
};

bool operator<(const Alapanyag &a, const Alapanyag &b) {
    return a.tp_korlat < b.tp_korlat;
}

std::vector<Alapanyag> beolvas(std::istream &be) {
    int n;
    be >> n;

    std::vector<Alapanyag> alapanyagok(n);
    for (auto &a: alapanyagok) {
        be >> a.tp_korlat;
    }
    for (auto &a: alapanyagok) {
        be >> a.mennyiseg;
    }

    return alapanyagok;
}

void feldolgoz(std::vector<Alapanyag> &alapanyagok) {
    sort(alapanyagok.begin(), alapanyagok.end());

    int64_t kibanyaszott = 0;
    int64_t eltelt_ido = 0;
    int k = 0, v = static_cast<int>(alapanyagok.size()) - 1;
    while (k <= v) {
        if (kibanyaszott >= alapanyagok[k].tp_korlat) {
            const int64_t akt_mennyiseg = alapanyagok[k].mennyiseg;

            kibanyaszott += akt_mennyiseg;
            eltelt_ido += akt_mennyiseg;
            //alapanyagok[k].mennyiseg = 0;
            k++;

        } else {
            const int64_t tp_korlathoz_szukseges = alapanyagok[k].tp_korlat - kibanyaszott;
            const int64_t akt_mennyiseg = std::min(tp_korlathoz_szukseges, alapanyagok[v].mennyiseg);

            kibanyaszott += akt_mennyiseg;
            eltelt_ido += 2 * akt_mennyiseg;
            alapanyagok[v].mennyiseg -= akt_mennyiseg;

            if (alapanyagok[v].mennyiseg == 0) {
                v--;
            }
        }
    }

    std::cout << eltelt_ido << '\n'; 
}

int main() {
    std::cin.tie(nullptr);
    std::ios_base::sync_with_stdio(false);

    auto alapanyagok = beolvas(std::cin);
    feldolgoz(alapanyagok);

    return 0;
}
SubtaskSumTestVerdictTimeMemory
base40/40
1Accepted0/01ms336 KiB
2Accepted0/06ms824 KiB
3Accepted2/21ms320 KiB
4Accepted2/21ms320 KiB
5Accepted2/24ms568 KiB
6Accepted2/28ms1168 KiB
7Accepted2/22ms320 KiB
8Accepted2/22ms320 KiB
9Accepted3/31ms320 KiB
10Accepted3/31ms432 KiB
11Accepted3/31ms320 KiB
12Accepted3/31ms320 KiB
13Accepted4/41ms624 KiB
14Accepted4/41ms320 KiB
15Accepted2/216ms1724 KiB
16Accepted2/220ms1992 KiB
17Accepted2/217ms1848 KiB
18Accepted2/228ms2700 KiB