215352026-01-13 12:48:50szabelrÓvodacpp17Wrong answer 35/50167ms15772 KiB
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

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

    int k, n;
    cin >> k >> n;
    vector<long long> db(n + 1);
    for (int i = 1; i <= n; i++)
    {
        cin >> db[i];
    }
    vector<vector<long long>> gyerek(k, vector<long long>(3));
    for (int i = 0; i < k; i++)
    {
        int x; cin >> x;
        gyerek[i][0] = i + 1;
        gyerek[i][1] = x;
    }
    for (int i = 0; i < k; i++)
    {
        int x; cin >> x;
        gyerek[i][2] = x;
    }

    sort(gyerek.begin(), gyerek.end(), [](auto a, auto b) {
        return a[2] > b[2];
        });

    long long sum = 0;
    vector<long long> res(k + 1, -1);

    vector<bool> volt_mar(n + 1, false);
    int betoltott_db = 0;

    for (int i = 0; i < k; i++)
    {
        int sz = gyerek[i][1];
        int hatra_van_gyerek = k - i;
        int ures_szerepek = n - betoltott_db;
        bool mehet = false;

        if (db[sz] > 0) {
            if (!volt_mar[sz]) {
                mehet = true;
            }
            else {
                if ((hatra_van_gyerek - 1) >= ures_szerepek) {
                    mehet = true;
                }
            }
        }

        if (mehet)
        {
            res[gyerek[i][0]] = sz;
            db[sz]--;
            if (!volt_mar[sz]) {
                volt_mar[sz] = true;
                betoltott_db++;
            }
        }
        else
        {
            sum += gyerek[i][2];
        }
    }

    vector<long long> maradt;
    for (int i = 1; i <= n; i++) {
        if (!volt_mar[i] && db[i] > 0) {
            maradt.push_back(i);
            db[i]--;
            volt_mar[i] = true;
        }
    }
    for (int i = 1; i <= n; i++)
    {
        while (db[i] > 0)
        {
            maradt.push_back(i);
            db[i]--;
        }
    }

    cout << sum << endl;
    int x = 0;
    for (int i = 1; i <= k; i++)
    {
        if (res[i] == -1)
        {
            res[i] = maradt[x];
            x++;
        }
    }
    for (int i = 1; i <= k; i++)
        cout << res[i] << " ";

    return 0;
}
SubtaskSumTestVerdictTimeMemory
base35/50
1Wrong answer0/01ms316 KiB
2Wrong answer0/08ms820 KiB
3Accepted2/21ms316 KiB
4Wrong answer0/21ms316 KiB
5Accepted2/21ms316 KiB
6Accepted2/21ms316 KiB
7Accepted2/21ms316 KiB
8Accepted2/21ms316 KiB
9Accepted2/21ms336 KiB
10Wrong answer0/21ms560 KiB
11Accepted2/21ms316 KiB
12Accepted2/21ms316 KiB
13Wrong answer0/22ms316 KiB
14Accepted3/32ms332 KiB
15Wrong answer0/318ms1420 KiB
16Wrong answer0/339ms2548 KiB
17Accepted3/368ms4376 KiB
18Accepted3/3100ms8832 KiB
19Accepted3/3123ms6396 KiB
20Accepted3/3145ms7096 KiB
21Wrong answer0/3159ms7852 KiB
22Accepted4/4167ms15772 KiB