241 2021. 03. 05 15:23:06 balinttt Óvoda cpp14 Elfogadva 50/50 103ms 6728 KiB
#include<bits/stdc++.h>

using namespace std;

class gyerek{
public:
    int sz, e;
    int index;
    int t=-1;
};

int n, m;

vector<int> mx;
vector<int> db;

vector<gyerek> p;

bool operator<(const gyerek& g1, const gyerek& g2){
    return g1.e > g2.e;
}

bool cmp1(const gyerek& g1, const gyerek& g2){
    return g1.index < g2.index;
}


int main(){
    cin >> n >> m;
    mx.resize(m);
    db.resize(m);
    for(int i=0;i<m;i++){
        cin >> mx[i];
    }
    p.resize(n);
    for(int i=0;i<n;i++){
        cin >> p[i].sz;
        --p[i].sz;
        p[i].index = i;
    }
    for(int i=0;i<n;i++){
        cin >> p[i].e;
        p[i].index = i;
    }
    sort(p.begin(), p.end());
    stack<int> ava;
    for(int i=0;i<n;i++){
        if(db[p[i].sz] < mx[p[i].sz]){
            p[i].t = p[i].sz;
            ++db[p[i].sz];
        } else {
            ava.push(i);
        }
    }
    int poi = n-1;
    for(int i = 0;i<m;i++){
        if(db[i] == 0){
            if(ava.size()){
                p[ava.top()].t = i;
                ++db[i];
                ava.pop();
            } else {
                while(db[p[poi].t] <2){
                    --poi;
                }
                --db[p[poi].t];
                p[poi].t = i;
                ++db[i];
            }
        }
    }
    stack<int> av;
    for(int i=0;i<m && av.size() < ava.size();i++){
        for(int j=0;j<mx[i]-db[i];j++){
            av.push(i);
        }
    }
    while(ava.size()){
        p[ava.top()].t = av.top();
        av.pop();
        ava.pop();
    }
    sort(p.begin(), p.end(), cmp1);
    long long er=0;
    for(int i=0;i<n;i++){
        //cout << p[i].t << ' ';
        er+=(p[i].t!=p[i].sz)*p[i].e;
    }
    cout << er << '\n';
    for(int i=0;i<n;i++){
        cout << p[i].t+1 << ' ';
        //er+=(p[i].t!=p[i].sz)*p[i].e;
    }
return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 50/50
1 Elfogadva 0/0 2ms 1768 KiB
2 Elfogadva 0/0 4ms 2000 KiB
3 Elfogadva 2/2 1ms 1876 KiB
4 Elfogadva 2/2 1ms 1876 KiB
5 Elfogadva 2/2 1ms 1884 KiB
6 Elfogadva 2/2 1ms 1884 KiB
7 Elfogadva 2/2 1ms 1888 KiB
8 Elfogadva 2/2 1ms 1896 KiB
9 Elfogadva 2/2 1ms 1904 KiB
10 Elfogadva 2/2 1ms 1904 KiB
11 Elfogadva 2/2 1ms 1908 KiB
12 Elfogadva 2/2 1ms 1912 KiB
13 Elfogadva 2/2 2ms 1932 KiB
14 Elfogadva 3/3 2ms 1948 KiB
15 Elfogadva 3/3 10ms 2392 KiB
16 Elfogadva 3/3 25ms 3176 KiB
17 Elfogadva 3/3 37ms 3472 KiB
18 Elfogadva 3/3 70ms 4640 KiB
19 Elfogadva 3/3 101ms 4704 KiB
20 Elfogadva 3/3 83ms 5676 KiB
21 Elfogadva 3/3 86ms 5552 KiB
22 Elfogadva 4/4 103ms 6728 KiB