// 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
exit status 1
Compilation failed: 7 error(s), 0 warnings