72002024-01-03 12:56:47MagyarKendeSZLGBányász RPG (40 pont)cpp17Hibás válasz 0/40400ms4972 KiB
#include <bits/stdc++.h>

#define speed cin.tie(0); ios::sync_with_stdio(0)
#define cinv(v) for (auto& e : v) cin >> e;
#define all(v) v.begin(), v.end()
#define has(s, e) s.count(e)

using namespace std;
using ll = long long;
using point = array<int, 2>;

int main() {
    speed;

    int N, xp = 0, t = 0;
    cin >> N;
    vector<point> v(N);

    for (int i = 0; i < N; i++) cin >> v[i][0];
    for (int i = 0; i < N; i++) cin >> v[i][1];

    sort(all(v), [](point a, point b){ return a[1] < b[1]; });

    // initially I was using a priority queue with but that got a time fail,
    // I got the hint that you can use two pointers :O
    int l = 0, r = N - 1;
    while (l < r) {
        if (v[l][0] <= xp) {
            // finish the remaining in one sitting (yum)
            t += v[l][1];
            xp += v[l][1];
            l++;
        } else {
            // if had to finish the inefficient way, this is done (mining be boring aa hell)
            if (--v[r][1] <= 0) r--;
            t += 2; // go one by one here, time and xp gain is constant
            xp++;
        }
    }

    cout << t;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base0/40
1Elfogadva0/03ms1828 KiB
2Hibás válasz0/08ms2308 KiB
3Hibás válasz0/23ms2228 KiB
4Hibás válasz0/23ms2448 KiB
5Hibás válasz0/27ms2900 KiB
6Hibás válasz0/212ms3044 KiB
7Hibás válasz0/24ms3124 KiB
8Hibás válasz0/24ms3480 KiB
9Hibás válasz0/33ms3272 KiB
10Hibás válasz0/33ms3372 KiB
11Hibás válasz0/33ms3372 KiB
12Hibás válasz0/33ms3472 KiB
13Hibás válasz0/43ms3712 KiB
14Hibás válasz0/43ms3664 KiB
15Időlimit túllépés0/2400ms3312 KiB
16Hibás válasz0/224ms4520 KiB
17Időlimit túllépés0/2358ms3384 KiB
18Hibás válasz0/229ms4972 KiB