249272026-02-16 21:29:28999Óvodacpp17Hibás válasz 28/50136ms16160 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;
#define int long long

signed main() {
    int n,k;cin>>n>>k;
    vector<int> hanyan(k);
    int siras=0;
    for(int i = 0;i<k;i++){
        cin>>hanyan[i];
    }
    vector<int> sir(n),fav(n),hova(n);
    for(int i = 0;i<n;i++){
        cin>>fav[i];
    }
    vector<vector<array<int,2>>> v(k),vv(k);
    vector<array<int,2>> legj(k),alles;
    for(int i = 0;i<n;i++){
        cin>>sir[i];
        fav[i]--;
        if(legj[fav[i]][0]<sir[i]){
            if(legj[fav[i]][0]>0)alles.push_back(legj[fav[i]]);
            legj[fav[i]]={sir[i],i};

        }
        else{
            alles.push_back({sir[i],i});
        }
    }
    for(int i = 0;i<n;i++){
        vv[fav[i]].push_back({sir[i],i});
    }
    //cout<<hova[0]<<endl;
    sort(alles.rbegin(),alles.rend());
    int J = alles.size()-1;
    for(int i = 0;i<k;i++){
        sort(vv[i].rbegin(),vv[i].rend());
        if(legj[i][0]==0){
            while(J>=0){
                auto it=lower_bound(vv[i].begin(),vv[i].end(),alles[J][0],[](const array<int,2>& a, int val){return a[0]<val;});
                int idx=it-vv[i].begin();
                if(hanyan[fav[alles[J][1]]]-1>=idx) J--;
                else break;
            }
            if(J<0)continue;
            siras+=alles[J][0];
            hova[alles[J][1]]=i+1;
            J--;
        }
        else hova[legj[i][1]]=i+1;
    }
    for(int i = 0;i<n;i++){
        if(hova[i]==0)v[fav[i]].push_back({sir[i],i});
    }
    for(int i = 0;i<k;i++){
        hanyan[i]--;
        sort(v[i].rbegin(),v[i].rend());
    }
    deque<array<int,2>> extra;
    for(int i = 0;i<k;i++){
        for(int j = 0;j<v[i].size();j++){
            if(j>=hanyan[i]){
                siras+=v[i][j][0];
            }
            else{
                hova[v[i][j][1]]=i+1;
            }
        }
        if(hanyan[i]>v[i].size()){
            extra.push_back({hanyan[i]-v[i].size(),i+1});
        }
    }
    cout<<siras<<endl;
    for(int i = 0;i<n;i++){
        if(hova[i])cout<<hova[i]<<' ';
        else{
            cout<<extra[0][1]<<' ';
            extra[0][0]--;
            if(extra[0][0]==0)extra.pop_front();
        }
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base28/50
1Elfogadva0/01ms316 KiB
2Hibás válasz0/06ms820 KiB
3Elfogadva2/21ms316 KiB
4Részben helyes1/21ms316 KiB
5Részben helyes1/21ms316 KiB
6Elfogadva2/21ms324 KiB
7Hibás válasz0/21ms316 KiB
8Elfogadva2/21ms316 KiB
9Elfogadva2/21ms316 KiB
10Elfogadva2/21ms500 KiB
11Elfogadva2/21ms316 KiB
12Részben helyes1/21ms344 KiB
13Hibás válasz0/22ms428 KiB
14Elfogadva3/32ms316 KiB
15Hibás válasz0/314ms1844 KiB
16Hibás válasz0/332ms3816 KiB
17Elfogadva3/346ms4860 KiB
18Hibás válasz0/375ms8792 KiB
19Elfogadva3/386ms8356 KiB
20Elfogadva3/397ms9572 KiB
21Részben helyes1/3109ms10416 KiB
22Hibás válasz0/4136ms16160 KiB