136732025-01-08 12:33:09tamasmarkÓvodacpp17Hibás válasz 10/50112ms4404 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].sir = 0;
            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; i <= n-db; ++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] << " ";
}
/*
7 4
2 2 2 2
1 2 4 1 2 2 4
1 4 2 1 2 3 7
*/
// 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
base10/50
1Elfogadva0/01ms316 KiB
2Hibás válasz0/04ms316 KiB
3Hibás válasz0/21ms316 KiB
4Elfogadva2/21ms316 KiB
5Részben helyes1/21ms316 KiB
6Elfogadva2/21ms316 KiB
7Hibás válasz0/21ms316 KiB
8Hibás válasz0/21ms320 KiB
9Elfogadva2/21ms320 KiB
10Elfogadva2/21ms316 KiB
11Hibás válasz0/21ms316 KiB
12Hibás válasz0/21ms552 KiB
13Hibás válasz0/22ms324 KiB
14Hibás válasz0/32ms328 KiB
15Hibás válasz0/313ms820 KiB
16Hibás válasz0/328ms1304 KiB
17Részben helyes1/345ms1564 KiB
18Hibás válasz0/365ms2708 KiB
19Hibás válasz0/378ms2748 KiB
20Hibás válasz0/386ms3380 KiB
21Hibás válasz0/3100ms3540 KiB
22Hibás válasz0/4112ms4404 KiB