28702023-02-01 11:10:53bzsofiaÓvodacpp11Hibás válasz 33/50136ms13532 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ÖsszpontTesztVerdiktIdőMemória
base33/50
1Elfogadva0/03ms1684 KiB
2Elfogadva0/08ms2172 KiB
3Elfogadva2/22ms1944 KiB
4Elfogadva2/22ms2076 KiB
5Elfogadva2/22ms2432 KiB
6Elfogadva2/23ms2364 KiB
7Hibás válasz0/22ms2616 KiB
8Elfogadva2/22ms2824 KiB
9Elfogadva2/22ms3036 KiB
10Elfogadva2/23ms3228 KiB
11Elfogadva2/23ms3472 KiB
12Elfogadva2/23ms3688 KiB
13Hibás válasz0/23ms3704 KiB
14Elfogadva3/33ms3740 KiB
15Hibás válasz0/317ms4624 KiB
16Hibás válasz0/335ms6224 KiB
17Elfogadva3/352ms6776 KiB
18Hibás válasz0/379ms9168 KiB
19Elfogadva3/393ms9376 KiB
20Elfogadva3/3104ms10776 KiB
21Elfogadva3/3119ms10960 KiB
22Hibás válasz0/4136ms13532 KiB