47692023-03-31 11:32:23AblablablaÓvodacpp17Részben helyes 23/5090ms15700 KiB
#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> pii;


vector<int> siras;

struct comp{
    bool operator()(int a, int b){
        return siras[a] > siras[b];
    }
};

int main()
{
    int n, k;
    cin >> n >> k;
    vector<int> hely(k + 1, 0);
    for(int i = 1; i <= k; i++){
        cin >> hely[i];
    }

    vector<vector<int>> szerepre(k + 1, vector<int>());
    vector<int> akar(n + 1, 0);

    for(int i = 1; i <= n; i++){
        int a;
        cin >> a;
        szerepre[a].push_back(i);
        akar[i] = a;
    }

    siras.assign(n + 1, 0);
    for(int i = 1; i <= n; i++){
        cin >> siras[i];
    }

    int valasz = 0;
    vector<bool> sirniFog(n + 1, false);
    //vector<pii> extrak(k+1, {0, 0});
    vector<int> nemSir;
    int sirosak = 0;
    int nullaDb =0;
    queue<int> nullaind;

    for(int i = 1; i <= k; i++){
        sort(szerepre[i].begin(), szerepre[i].end(), comp());
        for(int j = hely[i]; j < szerepre[i].size(); j++){
            int a = szerepre[i][j];
            valasz += siras[a];
            sirniFog[a] = true;
            nemSir.push_back(a);
            sirosak++;
        }

        if(szerepre[i].size() == 0){
            nullaind.push(i);
            nullaDb++;
        }

        /*if(szerepre[i].size() < hely[i]){
            extrak[i] = {i, hely[i] - szerepre[i].size()};
        }*/
    }

    sort(nemSir.begin(), nemSir.end());

    if(sirosak <= nullaDb){
        for(int i = 0; i < nullaDb - sirosak; i++){
            valasz += siras[nemSir[i]];
            sirniFog[nemSir[i]] = true;
        }

        cout << valasz << "\n";

        int uresHely = 0;
        int uresErtek = 0;
        for(int i = 1; i <= n; i++){
            if(sirniFog[i]){
                /*if(nullaind.size() == 0){
                    if(uresErtek == 0){
                        while(szerepre[uresHely].size() >= hely[uresHely]){
                            uresHely++;
                        }
                        uresErtek = hely[uresHely] - szerepre[uresHely].size();
                    }

                    cout << uresHely << " ";
                    uresErtek--;
                } else{*/
                    cout << nullaind.front() << " ";
                    nullaind.pop();
                //}

            } else{
                cout << akar[i] << " ";
            }
        }
    } else{
        cout << valasz << "\n";

        int uresHely = 0;
        int uresErtek = 0;
        for(int i = 1; i <= n; i++){
            if(sirniFog[i]){
                if(nullaind.size() == 0){
                    //cout << " nullaind: " << nullaind .size() << "\n";
                    if(uresErtek == 0){
                        while(szerepre[uresHely].size() >= hely[uresHely]){
                            uresHely++;
                        }
                        uresErtek = hely[uresHely] - szerepre[uresHely].size();
                    }

                    cout << uresHely << " ";
                    uresErtek--;
                } else{
                    cout << nullaind.front() << " ";
                    nullaind.pop();
                }

            } else{
                cout << akar[i] << " ";
            }
        }
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base23/50
1Elfogadva0/03ms1812 KiB
2Elfogadva0/06ms2308 KiB
3Elfogadva2/23ms2264 KiB
4Elfogadva2/23ms2476 KiB
5Részben helyes1/23ms2680 KiB
6Elfogadva2/23ms2888 KiB
7Futási hiba0/23ms2968 KiB
8Elfogadva2/23ms2996 KiB
9Elfogadva2/23ms3128 KiB
10Elfogadva2/23ms3500 KiB
11Elfogadva2/23ms3572 KiB
12Részben helyes1/23ms3536 KiB
13Futási hiba0/23ms3864 KiB
14Részben helyes1/33ms3840 KiB
15Hibás válasz0/314ms4644 KiB
16Hibás válasz0/328ms6528 KiB
17Elfogadva3/335ms5476 KiB
18Futási hiba0/352ms9936 KiB
19Részben helyes1/364ms7288 KiB
20Részben helyes1/371ms7596 KiB
21Részben helyes1/383ms8712 KiB
22Futási hiba0/490ms15700 KiB