2870 2023. 02. 01 11:10:53 bzsofia Óvoda cpp11 Hibás válasz 33/50 136ms 13532 KiB
// ovoda.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

//#include <fstream>
#include <iostream>
#include <vector>
#include <deque>
#include <algorithm>

#define int long long

using namespace std;

//ifstream fin("ovoda.in");

int i, n, m, ures, szerep, sir, j, last;
deque <int> maradek;

struct adat1
{
    int fer;
    bool van=0;
};

struct adat2
{
    int konny, cel, poz, lett;
};

bool comp1 (adat2 a, adat2 b)
{
    return a.konny > b.konny;
}

bool comp2(adat2 a, adat2 b)
{
    return a.poz < b.poz;
}

signed main()
{
    cin >> n >> m;
    vector <adat1> szin(m + 1);
    vector <adat2> gyerek(n + 1);
    for (i = 1; i <= m; ++i)
    {
        cin >> szin[i].fer;
    }

    for (i = 1; i <= n; ++i)
    {
        cin >> gyerek[i].cel;
        gyerek[i].poz = i;
    }

    for (i = 1; i <= n; ++i)
    {
        cin >> gyerek[i].konny;
    }

    sort(gyerek.begin() + 1, gyerek.end(), comp1);

    ures = m;
    for (i = 1; i <= n; ++i)
    {
        szerep = gyerek[i].cel;
        if (szin[szerep].fer)
        {
            if (!szin[szerep].van)
            {
                szin[szerep].van = 1;
            }
            gyerek[i].lett = szerep;
            --szin[szerep].fer;
        }
        else
        {
            maradek.push_back(i);
            sir += gyerek[i].konny;
        }
    }

    last = n;
    for (i = 1; i <= m; ++i)
    {
        if (!szin[i].van)
        {
            if (!maradek.empty())
            {
                szin[i].van = 1;
                --szin[i].fer;
                gyerek[maradek.front()].lett = i;
                maradek.pop_front();
            }
            else
            {
                for (j = last; j >= 1; --j)
                {
                    if (gyerek[j].lett == gyerek[j].cel)
                    {
                        szin[i].van = 1;
                        --szin[i].fer;
                        gyerek[j].lett = i;
                        last = j-1;
                        break;
                    }
               }
            }
        }
    }

    i = 1;
    while (!maradek.empty() && i<=m)
    {
        while (!maradek.empty() && szin[i].fer)
        {
            --szin[i].fer;
            gyerek[maradek.front()].lett = i;
            maradek.pop_front();
        }
        ++i;
    }

    sort(gyerek.begin() + 1, gyerek.end(), comp2);

    cout << sir << "\n";
    for (i = 1; i <= n; ++i)
    {
        cout << gyerek[i].lett << " ";
    }

    return 0;
}

// Run program: Ctrl + F5 or Debug > Start Without Debugging menu
// Debug program: F5 or Debug > Start Debugging menu

// Tips for Getting Started: 
//   1. Use the Solution Explorer window to add/manage files
//   2. Use the Team Explorer window to connect to source control
//   3. Use the Output window to see build output and other messages
//   4. Use the Error List window to view errors
//   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
//   6. In the future, to open this project again, go to File > Open > Project and select the .sln file
Részfeladat Összpont Teszt Verdikt Idő Memória
base 33/50
1 Elfogadva 0/0 3ms 1684 KiB
2 Elfogadva 0/0 8ms 2172 KiB
3 Elfogadva 2/2 2ms 1944 KiB
4 Elfogadva 2/2 2ms 2076 KiB
5 Elfogadva 2/2 2ms 2432 KiB
6 Elfogadva 2/2 3ms 2364 KiB
7 Hibás válasz 0/2 2ms 2616 KiB
8 Elfogadva 2/2 2ms 2824 KiB
9 Elfogadva 2/2 2ms 3036 KiB
10 Elfogadva 2/2 3ms 3228 KiB
11 Elfogadva 2/2 3ms 3472 KiB
12 Elfogadva 2/2 3ms 3688 KiB
13 Hibás válasz 0/2 3ms 3704 KiB
14 Elfogadva 3/3 3ms 3740 KiB
15 Hibás válasz 0/3 17ms 4624 KiB
16 Hibás válasz 0/3 35ms 6224 KiB
17 Elfogadva 3/3 52ms 6776 KiB
18 Hibás válasz 0/3 79ms 9168 KiB
19 Elfogadva 3/3 93ms 9376 KiB
20 Elfogadva 3/3 104ms 10776 KiB
21 Elfogadva 3/3 119ms 10960 KiB
22 Hibás válasz 0/4 136ms 13532 KiB