4874 2023. 04. 05 20:31:01 CWM Bányász RPG (40 pont) cpp17 Accepted 40/40 30ms 6516 KiB
#include <iostream>
#include <vector>
#include <climits>
#include <algorithm>
#include <unordered_set>

//upper bound >
//lower bound >=
//int index = (lower_bound(testvec.begin(), testvec.end(), num)-testvec.begin());

using namespace std;
using ll = long long;
#define int ll
int mod = 1000000007;

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    int c;
    cin >> c;
    vector<pair<int,int>> exp(c); //expReq, amount
    for (size_t i = 0; i < c; i++)
    {
        int a;
        cin >> a;
        exp[i] = { a,0 };
    }
    for (size_t i = 0; i < c; i++)
    {
        int a;
        cin >> a;
        exp[i] = { exp[i].first,a };
    }
    sort(exp.begin(), exp.end());
    int totalEllapsed = 0;
    int fwindex = 0;
    int bwindex = c - 1;
    int curExp = 0;
    while (true)
    {
        if (bwindex == fwindex) {
            int expneeded = exp[fwindex].first - curExp;
            if (expneeded < 0) expneeded = 0;
            totalEllapsed += 2 * (expneeded);
            curExp = exp[fwindex].first;
            exp[fwindex] = { exp[fwindex].first,exp[fwindex].second - expneeded };
            totalEllapsed += exp[fwindex].second;
            cout << totalEllapsed;
            return 0;
        }
        if (curExp >= exp[fwindex].first) {
            totalEllapsed += exp[fwindex].second;
            curExp += exp[fwindex].second;
            exp[fwindex] = { exp[fwindex].first,0 };
            fwindex++;
        }
        else {
            if (exp[fwindex].first - curExp < exp[bwindex].second) {
                totalEllapsed += 2 * (exp[fwindex].first - curExp);
                exp[bwindex] = { exp[bwindex].first,exp[bwindex].second - (exp[fwindex].first - curExp) };
                curExp = exp[fwindex].first;
            }
            else {
                totalEllapsed += 2 * (exp[bwindex].second);
                curExp += exp[bwindex].second;
                exp[bwindex] = { exp[bwindex].first,0 };
                bwindex--;
            }
        }
    }
    cout << totalEllapsed;
}
Subtask Sum Test Verdict Time Memory
base 40/40
1 Accepted 0/0 3ms 1828 KiB
2 Accepted 0/0 7ms 2352 KiB
3 Accepted 2/2 2ms 2136 KiB
4 Accepted 2/2 3ms 2284 KiB
5 Accepted 2/2 6ms 2484 KiB
6 Accepted 2/2 12ms 3256 KiB
7 Accepted 2/2 4ms 2836 KiB
8 Accepted 2/2 4ms 3076 KiB
9 Accepted 3/3 2ms 3016 KiB
10 Accepted 3/3 3ms 3076 KiB
11 Accepted 3/3 3ms 3292 KiB
12 Accepted 3/3 3ms 3380 KiB
13 Accepted 4/4 3ms 3652 KiB
14 Accepted 4/4 3ms 3592 KiB
15 Accepted 2/2 17ms 5180 KiB
16 Accepted 2/2 24ms 6016 KiB
17 Accepted 2/2 19ms 5492 KiB
18 Accepted 2/2 30ms 6516 KiB