148752025-02-05 18:29:25antiÓvodacpp17Hibás válasz 17/50500ms4148 KiB
#include <iostream>
#include <algorithm>

using namespace std;

struct gyerek{
    int szerep, siras, sorsz;
};

bool comp1(gyerek a, gyerek b){
    if(a.szerep != b.szerep){
        return a.szerep < b.szerep;
    }else if(a.siras != b.siras){
        return a.siras > b.siras;
    }else{
        return a.sorsz < b.sorsz;
    }
}

bool comp2(gyerek a, gyerek b){
    if(a.siras != b.siras){
        return a.siras < b.siras;
    }else if(a.sorsz != b.sorsz){
        return a.sorsz > b.sorsz;
    }else{
        return a.szerep < b.szerep;
    }
}

int main()
{
    int n, k;
    cin >> n >> k;
    gyerek gy[n];
    int m[k], meg[n], M[k], Min=0;
    bool v[n] = {0}, e[k] = {0};
    for(int i=0; i<k; i++){
        cin >> m[i];
        M[i] = m[i];
    }
    for(int i=0; i<n; i++){
        cin >> gy[i].szerep;
        gy[i].szerep--;
        gy[i].sorsz = i;
    }
    for(int i=0; i<n; i++){
        cin >> gy[i].siras;
    }
    sort(gy, gy+n, comp1);


    for(int i=0; i<n; i++){
        if(m[gy[i].szerep] > 0){
            meg[gy[i].sorsz] = gy[i].szerep + 1;
            m[gy[i].szerep]--;
            v[gy[i].sorsz] = 1;
            e[gy[i].szerep] = 1;
        }
    }
    sort(gy, gy+n, comp2);
    for(int i=0; i<k; i++){
        if(e[i] == 0){
            for(int j=0; j<n; j++){
                if(v[gy[j].sorsz] == 0){
                    meg[gy[j].sorsz] = i+1;
                    m[i]--;
                    v[gy[j].sorsz] = 1;
                    e[i] = 1;
                }
            }
        }
    }
    bool kesz;
    int h;
    for(int i=0; i<k; i++){
        if(e[i] == 0){
            kesz = false;
            h=0;
            while(kesz == false){
                if(M[meg[gy[h].sorsz]] > 1){
                    meg[gy[h].sorsz] = i;
                    kesz = true;
                }else
                    h++;
            }
        }
    }
    for(int i=0; i<n; i++){
        if(gy[i].szerep + 1 != meg[gy[i].sorsz]){
            Min += gy[i].siras;
        }
    }
    cout << Min << endl;
    for(int i=0; i<n; i++){
        cout << meg[i] << " ";
    }

}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base17/50
1Elfogadva0/01ms496 KiB
2Hibás válasz0/06ms316 KiB
3Részben helyes1/21ms316 KiB
4Elfogadva2/21ms508 KiB
5Részben helyes1/21ms1012 KiB
6Elfogadva2/21ms564 KiB
7Hibás válasz0/21ms512 KiB
8Részben helyes1/21ms500 KiB
9Elfogadva2/21ms316 KiB
10Elfogadva2/21ms316 KiB
11Részben helyes1/21ms316 KiB
12Részben helyes1/21ms316 KiB
13Hibás válasz0/22ms316 KiB
14Részben helyes1/32ms508 KiB
15Hibás válasz0/328ms820 KiB
16Futási hiba0/3337ms1324 KiB
17Részben helyes1/350ms1588 KiB
18Időlimit túllépés0/3500ms2316 KiB
19Részben helyes1/389ms2868 KiB
20Részben helyes1/398ms2964 KiB
21Hibás válasz0/3115ms3636 KiB
22Időlimit túllépés0/4485ms4148 KiB