3754 2023. 03. 02 19:55:28 renn Gladiátorok (40 pont) cpp17 Elfogadva 40/40 70ms 13160 KiB
#include <bits/stdc++.h>
using namespace std;
#define GOTTAGOFAST cin.tie(0); cout.tie(0); ios::sync_with_stdio(0);

struct compar
{
    bool operator()(pair<long long,long long> &a, pair<long long,long long> &b)
    {
        if(a.first < b.first)
            return true;
        
        if(a.first > b.first)
            return false;
        
        return a.second > b.second;
    }
};

struct compar2
{
    bool operator()(pair<long long,int> &a, pair<long long,int> &b)
    {
        return a.first < b.first;
    }
};

int main()
{
    GOTTAGOFAST
    long long szen, glad;
    cin >> szen >> glad;

    vector< pair<long long, long long> > szenat(szen);
    vector< pair<long long, int> > gladiat(glad+1);
    vector<long long> prevglad(glad+1, 0);
    vector<int> gyozelmek(glad+1, 0);
    for(auto &x : szenat)
    {
        cin >> x.first >> x.second;
    }

    sort(szenat.begin(), szenat.end(), compar());

    for(int i = 1; i <= glad; i++)
    {
        cin >> gladiat[i].first;
        prevglad[i] = gladiat[i].first;
        gladiat[i].second = i;
    }
    gladiat[0].first = 0;
    gladiat[0].second = 0;

    sort(gladiat.begin(), gladiat.end(), compar2());

    /*for(auto &x : gladiat)
        cout << x.first << ":" << x.second << " ";
    cout << "\n";*/
    for(int i = 1, j = 0; i <= glad; i++)
    {
        //cout << (gladiat[i].first) << "-";
        gladiat[i].first += (gladiat[i-1].first-prevglad[gladiat[i-1].second]);
        //cout << gladiat[i].first << "\n";
        gyozelmek[gladiat[i].second] = gyozelmek[gladiat[i-1].second];
        for(; j < szen; j++)
        {
            //cout << gladiat[i].second << ":" << gladiat[i].first << " -> " << szenat[j].first << "\n";
            if(gladiat[i].first >= szenat[j].first)
            {
                gladiat[i].first += szenat[j].second;
                gyozelmek[gladiat[i].second]++;
                continue;
            }
            break;
        }
    }
    /*for(auto &x : gladiat)
        cout << x.first << ":" << x.second << " ";
    cout << "\n";*/

    for(int i = 1; i <= glad; i++)
        cout << gyozelmek[i] << " ";

    cout << "\n";
    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 40/40
1 Elfogadva 0/0 3ms 1988 KiB
2 Elfogadva 0/0 16ms 4156 KiB
3 Elfogadva 2/2 3ms 2304 KiB
4 Elfogadva 2/2 3ms 2516 KiB
5 Elfogadva 2/2 4ms 2984 KiB
6 Elfogadva 2/2 4ms 3196 KiB
7 Elfogadva 2/2 4ms 3408 KiB
8 Elfogadva 2/2 4ms 3492 KiB
9 Elfogadva 2/2 4ms 3756 KiB
10 Elfogadva 2/2 4ms 3672 KiB
11 Elfogadva 2/2 12ms 4748 KiB
12 Elfogadva 2/2 50ms 9412 KiB
13 Elfogadva 2/2 50ms 10884 KiB
14 Elfogadva 2/2 68ms 12468 KiB
15 Elfogadva 2/2 68ms 12664 KiB
16 Elfogadva 2/2 70ms 12844 KiB
17 Elfogadva 2/2 68ms 12892 KiB
18 Elfogadva 2/2 59ms 12856 KiB
19 Elfogadva 2/2 59ms 12852 KiB
20 Elfogadva 2/2 61ms 12948 KiB
21 Elfogadva 2/2 63ms 13160 KiB
22 Elfogadva 2/2 64ms 13068 KiB