9414 2024. 02. 21 14:11:06 AGergo Bányász RPG (40 pont) cpp17 Hibás válasz 32/40 20ms 4828 KiB
#include <bits/stdc++.h>

using namespace std;

int main()
{
    iostream::sync_with_stdio(0);
    cin.tie(0);


    int n;
    cin >> n;
    vector<int> be(n);
    vector<int> req(100000,0);

    for(int i = 0; i < n; i++)
    {
        cin >> be[i];
    }
    int t;
    for(int i = 0; i < n; i++)
    {
        cin >> t;
        req[be[i]] += t;
    }

    int curExp = 0;
    long long time = 0;

    int l=0; //-> at lowest requirement place
    int h=99999; // highest requirement place



    while(l != h)
    {
        while(req[l]==0)
        {
            l++;
            //cout << l <<"l\n";
        }
        while(req[h]==0)
        {
            h--;
            //cout << h <<"h\n";
        }
        if(curExp >= l)
        {
            //cout << "a\n";
            //cout << curExp << "-" << time << " " << l << " " << req[l] << ":" << h << " " << req[h] << "\n";
            curExp += req[l];
            time += req[l];
            req[l] = 0;
            //cout << curExp << "-" << time << " " << l << " " << req[l] << ":" << h << " " << req[h] << "\n----------\n";
        }
        else
        {
            if(curExp + req[h] >= l)
            {
                //cout << "b\n";
                //cout << curExp << "-" << time << " " << l << " " << req[l] << ":" << h << " " << req[h] << "\n";
                time+=2*(l-curExp);
                req[h]-= l-curExp;
                curExp += l-curExp;
                //cout << curExp << "-" << time << " " << l << " " << req[l] << ":" << h << " " << req[h] << "\n----------\n";
            }
            else //curExp + x lepés = l -> x-et keressük
            {
                //cout << "c\n";
                //cout << curExp << "-" << time << " " << l << " " << req[l] << ":" << h << " " << req[h] << "\n";
                curExp += req[h];
                time += 2*req[h];
                req[h] = 0;
                //cout << curExp << "-" << time << " " << l << " " << req[l] << ":" << h << " " << req[h] << "\n----------\n";
            }
        }
    }
    if(curExp>=l)
    {
        curExp += req[l];
        time += req[l];
        req[l] = 0;
    }
    else if(curExp + req[h] < l)
    {
        curExp += req[h];
        time += 2*req[h];
        req[h] = 0;
    }
    else
    {
        time+=2*(l-curExp);
        curExp += l-curExp;
        req[h]-=l-curExp;
    }
    cout << time;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 32/40
1 Elfogadva 0/0 3ms 2800 KiB
2 Elfogadva 0/0 7ms 2948 KiB
3 Elfogadva 2/2 3ms 2964 KiB
4 Elfogadva 2/2 3ms 3032 KiB
5 Elfogadva 2/2 6ms 3160 KiB
6 Elfogadva 2/2 8ms 3436 KiB
7 Elfogadva 2/2 4ms 3796 KiB
8 Elfogadva 2/2 4ms 3664 KiB
9 Elfogadva 3/3 3ms 3600 KiB
10 Elfogadva 3/3 3ms 3728 KiB
11 Elfogadva 3/3 3ms 3940 KiB
12 Elfogadva 3/3 3ms 4016 KiB
13 Elfogadva 4/4 3ms 4092 KiB
14 Elfogadva 4/4 3ms 4228 KiB
15 Hibás válasz 0/2 14ms 4424 KiB
16 Hibás válasz 0/2 17ms 4704 KiB
17 Hibás válasz 0/2 14ms 4780 KiB
18 Hibás válasz 0/2 20ms 4828 KiB