9366 2024. 02. 21 10:07:47 ananász Óvoda cpp17 Elfogadva 50/50 127ms 22884 KiB
// ovoda.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct gy {
	int id;
	int siras;
};
struct szerep {
	int akt_db;
	int max_db;
	vector<gy>gyerek;
};

struct gyerek {
	int kivant;
	int siras;
	int kapott;
	int id;
};
bool rendez(gy gy1, gy gy2) {
	return gy1.siras > gy2.siras;
}
bool rendez2(gy gy1, gy gy2) {
	return gy1.siras < gy2.siras;
}
int main()
{
	int N, K;
	cin >> N >> K;
	vector<szerep>szerepek(K);
	int x;
	for (int i = 0; i < K; i++)
	{
		cin >> x;
		szerepek[i].max_db = x;
		szerepek[i].akt_db = 0;
	}
	vector<gyerek>gyerekek(N);
	gy y;
	for (int i = 0; i < N; i++)
	{
		cin >> x;
		gyerekek[i].kivant = x;
		gyerekek[i].kapott = -1;
		gyerekek[i].id = i;
	}
	int siras = 0;
	for (int i = 0; i < N; i++)
	{
		cin >> x;
		gyerekek[i].siras = x;
		y.id = i;
		y.siras = x;
		szerepek[gyerekek[i].kivant - 1].gyerek.push_back(y);
		siras += x;
	}
	vector<int>nemvalasztott;
	vector<gy>ujraoszthato;
	vector<int>kimaradt_szerep;
	int cv;
	for (int i = 0; i < K; i++)
	{
		if (szerepek[i].gyerek.size() == 0)
		{
			nemvalasztott.push_back(i + 1);
			for (int j = 1; j < szerepek[i].max_db; j++)
			{
				kimaradt_szerep.push_back(i + 1);
			}
		}
		else
		{
			cv = 0;
			sort(szerepek[i].gyerek.begin(), szerepek[i].gyerek.end(), rendez);
			while (cv < szerepek[i].gyerek.size() && szerepek[i].akt_db < szerepek[i].max_db)
			{
				gyerekek[szerepek[i].gyerek[cv].id].kapott = i + 1;
				siras -= szerepek[i].gyerek[cv].siras;
				if (szerepek[i].akt_db > 0)
				{
					ujraoszthato.push_back(szerepek[i].gyerek[cv]);
				}
				cv++;
				szerepek[i].akt_db++;
			}
			for (int j = szerepek[i].gyerek.size(); j < szerepek[i].max_db; j++)
			{
				kimaradt_szerep.push_back(i + 1);
			}

		}

	}
	cv = 0;
	int id = 0;
	while (cv < nemvalasztott.size() && id < N)
	{
		while (id < N && gyerekek[id].kapott != -1)
		{
			id++;
		}
		if (id < N)
		{
			gyerekek[id].kapott = nemvalasztott[cv];
			id++;
			cv++;
		}
	}
	if (cv < nemvalasztott.size())
	{
		sort(ujraoszthato.begin(), ujraoszthato.end(), rendez2);
		id = 0;
		while (cv < nemvalasztott.size())
		{
			gyerekek[ujraoszthato[id].id].kapott = nemvalasztott[cv];
			siras += ujraoszthato[id].siras;
			id++;
			cv++;
		}
	}
	else if (id < N)
	{
		cv = 0;
		for (int i = id; i < N; i++)
		{
			if (gyerekek[i].kapott == -1)
			{
				gyerekek[i].kapott = kimaradt_szerep[cv];
				cv++;
			}
		}
	}

	cout << siras << endl;
	string sep = "";
	for (int i = 0; i < N; i++)
	{
		cout << sep << gyerekek[i].kapott;
		sep = " ";
	}
	cout << endl;
}


// 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 50/50
1 Elfogadva 0/0 3ms 1680 KiB
2 Elfogadva 0/0 7ms 2396 KiB
3 Elfogadva 2/2 3ms 2060 KiB
4 Elfogadva 2/2 3ms 2312 KiB
5 Elfogadva 2/2 3ms 2364 KiB
6 Elfogadva 2/2 3ms 2596 KiB
7 Elfogadva 2/2 3ms 2716 KiB
8 Elfogadva 2/2 3ms 2740 KiB
9 Elfogadva 2/2 3ms 2944 KiB
10 Elfogadva 2/2 3ms 3144 KiB
11 Elfogadva 2/2 3ms 3132 KiB
12 Elfogadva 2/2 3ms 3260 KiB
13 Elfogadva 2/2 3ms 3360 KiB
14 Elfogadva 3/3 3ms 3336 KiB
15 Elfogadva 3/3 14ms 4788 KiB
16 Elfogadva 3/3 32ms 6976 KiB
17 Elfogadva 3/3 41ms 8580 KiB
18 Elfogadva 3/3 72ms 15848 KiB
19 Elfogadva 3/3 74ms 11984 KiB
20 Elfogadva 3/3 79ms 11992 KiB
21 Elfogadva 3/3 94ms 13700 KiB
22 Elfogadva 4/4 127ms 22884 KiB