95732024-02-23 11:17:45Vkrisztian01Óvodacpp17Hibás válasz 46/50109ms7144 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ÖsszpontTesztVerdiktIdőMemória
base46/50
1Elfogadva0/03ms1876 KiB
2Hibás válasz0/07ms2328 KiB
3Elfogadva2/23ms2324 KiB
4Elfogadva2/22ms2360 KiB
5Részben helyes1/22ms2368 KiB
6Elfogadva2/22ms2360 KiB
7Elfogadva2/23ms2492 KiB
8Elfogadva2/23ms2728 KiB
9Elfogadva2/22ms2708 KiB
10Elfogadva2/22ms2588 KiB
11Elfogadva2/23ms2612 KiB
12Részben helyes1/23ms2688 KiB
13Elfogadva2/23ms2828 KiB
14Elfogadva3/33ms2912 KiB
15Elfogadva3/314ms3460 KiB
16Elfogadva3/328ms4040 KiB
17Elfogadva3/341ms4684 KiB
18Elfogadva3/364ms5684 KiB
19Elfogadva3/372ms5856 KiB
20Elfogadva3/381ms6228 KiB
21Részben helyes1/398ms6352 KiB
22Elfogadva4/4109ms7144 KiB