9573 2024. 02. 23 11:17:45 Vkrisztian01 Óvoda cpp17 Hibás válasz 46/50 109ms 7144 KiB
#include <iostream>
#include<vector>
#include<set>
#include<algorithm>

using namespace std;

int n,k,szabadgyerek,szabadszerep,hiszti=0;
vector<int>beosztas;
vector<pair<int,pair<int,int> > > sor;
vector<bool>valasztottszerepet;
vector<bool>valasztottak;
vector<int>maxdb;

int main()
{
    cin>>n>>k;
    szabadgyerek=n;
    szabadszerep=k;
    maxdb.resize(k+1);
    beosztas.resize(n+1);
    sor.resize(n);
    valasztottszerepet.assign(n+1,false);
    valasztottak.assign(n+1,false);
    for(int i=1;i<=k;i++) cin>>maxdb[i];
    for(int i=0;i<n;i++)
    {
        sor[i].second.second=i+1;
        cin>>sor[i].second.first;
    }
    for(int i=0;i<n;i++) cin>>sor[i].first;
    sort(sor.begin(),sor.end(),greater<>());
    for(auto x:sor)
    {
        if(!valasztottak[x.second.first])
        {
            valasztottak[x.second.first]=true;
            valasztottszerepet[x.second.second]=true;
            --szabadgyerek;
            --szabadszerep;
            beosztas[x.second.second]=x.second.first;
            maxdb[x.second.first]--;
            continue;
        }
        if(szabadgyerek>szabadszerep && maxdb[x.second.first])
        {
            valasztottszerepet[x.second.second]=true;
            --szabadgyerek;
            beosztas[x.second.second]=x.second.first;
            maxdb[x.second.first]--;
            continue;
        }
    }
    int index=1;
    for(auto x:sor)
    {
        if(valasztottszerepet[x.second.second]) continue;
        if(szabadgyerek==szabadszerep)
        {
            while(index<=k && valasztottak[index]) ++index;
            valasztottak[index]=true;
            --maxdb[index];
            --szabadgyerek;
            --szabadszerep;
            valasztottszerepet[x.second.second]=true;
            beosztas[x.second.second]=index;
            hiszti+=x.first;
            continue;
        }
        if(szabadgyerek>szabadszerep)
        {
            while(index<=k && !maxdb[index]) ++index;
            if(valasztottak[index])
            {
                valasztottak[index]=false;
                --szabadszerep;
            }
            --maxdb[index];
            --szabadgyerek;
            valasztottszerepet[x.second.second]=true;
            beosztas[x.second.second]=index;
            hiszti+=x.first;
            continue;
        }


    }



    cout<<hiszti<<endl;

    for(int i=1;i<=n;i++)
    {
        cout<<beosztas[i]<<" ";
    }
    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 46/50
1 Elfogadva 0/0 3ms 1876 KiB
2 Hibás válasz 0/0 7ms 2328 KiB
3 Elfogadva 2/2 3ms 2324 KiB
4 Elfogadva 2/2 2ms 2360 KiB
5 Részben helyes 1/2 2ms 2368 KiB
6 Elfogadva 2/2 2ms 2360 KiB
7 Elfogadva 2/2 3ms 2492 KiB
8 Elfogadva 2/2 3ms 2728 KiB
9 Elfogadva 2/2 2ms 2708 KiB
10 Elfogadva 2/2 2ms 2588 KiB
11 Elfogadva 2/2 3ms 2612 KiB
12 Részben helyes 1/2 3ms 2688 KiB
13 Elfogadva 2/2 3ms 2828 KiB
14 Elfogadva 3/3 3ms 2912 KiB
15 Elfogadva 3/3 14ms 3460 KiB
16 Elfogadva 3/3 28ms 4040 KiB
17 Elfogadva 3/3 41ms 4684 KiB
18 Elfogadva 3/3 64ms 5684 KiB
19 Elfogadva 3/3 72ms 5856 KiB
20 Elfogadva 3/3 81ms 6228 KiB
21 Részben helyes 1/3 98ms 6352 KiB
22 Elfogadva 4/4 109ms 7144 KiB