136562025-01-08 12:14:43tamasmarkÓvodacpp17Hibás válasz 4/50118ms5684 KiB
// ovoda.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include <iostream>
#include <queue>
#include <deque>
#include <algorithm>
using namespace std;
struct adat
{
    int gyerek,sir,szerep,veg;
    bool hasznalt;
};
struct adat2
{
    int first, second, index;
};
deque<adat>x;
int n, i, j, m,db,minsiras,k;
deque<adat2>helyek;
struct adat3
{
    int sir, gyerek,szerep;
};
deque<adat3>varolista;
vector<int>megold;
bool hasonlit(adat a, adat b)
{
    if (a.sir > b.sir&&a.hasznalt==false&&b.hasznalt ==false) return 1;
    else return 0;
}
int main()
{
    cin >> n >> m;
    x.resize(n + 1);
    helyek.resize(m + 1);
    megold.resize(n + 1);
    for (i = 1; i <= m; ++i)
        cin >> helyek[i].first;
    for (i = 1; i <= n; ++i)
        cin >> x[i].szerep;
    for (i = 1; i <= n; ++i)
    {
        x[i].gyerek = i;
        cin >> x[i].sir;
        if (helyek[x[i].szerep].second < x[i].sir)
        {
            helyek[x[i].szerep].second = x[i].sir;
            helyek[x[i].szerep].index = i;
        }
    }

    for (i = 1; i <= m; ++i)
    {

        if (helyek[i].second > 0)
        {
            db++;
            x[helyek[i].index].hasznalt = true;
            megold[helyek[i].index] = i;
        }
        else if (helyek[i].second == 0 && k == 0) k = i;
    }
    sort(x.begin()+1, x.end(), hasonlit);
    for (i = 1+db; i <= n; ++i)
    {
        if (helyek[x[i].szerep].first - 1 > 0)
        {
            helyek[x[i].szerep].first--;
            megold[x[i].gyerek] = x[i].szerep;
        }
        else
        {
            varolista.push_back({ x[i].sir,x[i].gyerek,x[i].szerep });
        }
    }

    for (i =varolista.size()-1; i >= 0; i--)
    {
        if (helyek[k].second != 0)
        {
            while (helyek[k].second != 0 && k <= m) k++;
            if (k > m) break;
        }
        else if (helyek[k].second == 0)
        {
            
            megold[varolista[i].gyerek] = k;
            k++;
            minsiras += varolista[i].sir;
        }
    }
    cout << minsiras << "\n";
    for (i = 1; i <= n; ++i) cout << megold[i] << " ";
}
/*
6 4
2 2 2 2
1 2 4 1 2 2
1 4 2 1 2 3
*/
// 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
base4/50
1Elfogadva0/01ms316 KiB
2Hibás válasz0/04ms564 KiB
3Hibás válasz0/21ms316 KiB
4Hibás válasz0/21ms316 KiB
5Hibás válasz0/21ms500 KiB
6Elfogadva2/21ms316 KiB
7Hibás válasz0/21ms316 KiB
8Hibás válasz0/21ms316 KiB
9Elfogadva2/21ms548 KiB
10Hibás válasz0/21ms532 KiB
11Hibás válasz0/21ms316 KiB
12Hibás válasz0/21ms316 KiB
13Hibás válasz0/22ms412 KiB
14Hibás válasz0/32ms508 KiB
15Hibás válasz0/314ms908 KiB
16Hibás válasz0/329ms1608 KiB
17Hibás válasz0/343ms2060 KiB
18Hibás válasz0/368ms3364 KiB
19Hibás válasz0/378ms3636 KiB
20Hibás válasz0/386ms4040 KiB
21Hibás válasz0/398ms4404 KiB
22Hibás válasz0/4118ms5684 KiB