2352021-03-05 12:02:53Kevinke12Óvodacpp14Wrong answer 33/50497ms5260 KiB
#include <iostream>
#include <algorithm>
using namespace std;

int N, M;
int szerep[100005];
int eljatszak[100005]; //hanyan jatszak az adot szerepet
int kime[100005]; //ki melyiket kapja

struct adat
{
    int ind;
    int aksz;
    int sir;
};
bool Rend(adat a, adat b)
{
    return ((a.sir>b.sir) || ((a.sir==b.sir) && (szerep[a.aksz]<szerep[b.aksz])));
}
adat t[100005];

int KoviSzerep() //megadja a kovetkezo szerepeket
{
    for(int i = 1; i <= M; i++)
    {
        if(eljatszak[i]==0)
            return i;
    }
    //már mindenen szerepet játszanak -> kell pár még az embereknek
    for(int i = 1; i <= M; i++)
    {
        if(eljatszak[i]<szerep[i]) //még van hely rá
            return i;
    }
}

int main()
{
    cin >> N >> M;
    for(int i = 1; i <= M; i++)
    {
        cin >> szerep[i];
    }
    for(int i = 1; i <= N; i++)
    {
        t[i].ind=i;
        cin >> t[i].aksz;
    }
    for(int i = 1; i <= N; i++)
    {
        cin >> t[i].sir;
    }
    //Rendezünk
    sort(t+1, t+N+1, Rend);

    int ans=0;
    //Mohó vagyok
    //Mindekinek a kedvére teszek
    for(int i = 1; i <= N; i++)
    {
        if(eljatszak[t[i].aksz] < szerep[t[i].aksz])
        {
            kime[t[i].ind] = t[i].aksz;
            eljatszak[t[i].aksz]++;
        }
        else
            ans+=t[i].sir;
    }

    //most vannak, akik sírnak, töltöm az üres szerepeket
    int almafa=0;
    for(int i = 1; i <= N; i++)
    {
        if(kime[i]==0)//adunk neki szerepet
        {
            almafa = KoviSzerep();
            kime[i] = almafa;
            eljatszak[kime[i]]++;
        }
    }
    //van e szerep, amit nem jatszik el senki sem
    for(int j = 1; j <= M; j++)
    {
        if(eljatszak[j]==0) //senki eddig
        {
            for(int i = N; i >= 1; i--)
            {
                if(eljatszak[kime[t[i].ind]]>1)//van rajta kivul mas
                {
                    ans+=t[i].sir;
                    kime[t[i].ind] = j;
                    eljatszak[szerep[t[i].ind]]--;
                    eljatszak[j]++;
                    break;
                }
            }
        }
    }
    cout << ans << "\n";
    for(int i = 1; i <= N; i++)
    {
        cout << kime[i] << " ";
    }
    cout << "\n";
    return 0;
}
SubtaskSumTestVerdictTimeMemory
base33/50
1Accepted0/02ms1816 KiB
2Accepted0/04ms2056 KiB
3Accepted2/21ms1904 KiB
4Accepted2/21ms1900 KiB
5Accepted2/21ms1904 KiB
6Accepted2/21ms1900 KiB
7Wrong answer0/21ms1900 KiB
8Accepted2/21ms1908 KiB
9Accepted2/21ms1900 KiB
10Accepted2/21ms1904 KiB
11Accepted2/21ms1908 KiB
12Accepted2/21ms1908 KiB
13Wrong answer0/22ms1924 KiB
14Accepted3/32ms1920 KiB
15Wrong answer0/313ms2400 KiB
16Wrong answer0/378ms2996 KiB
17Accepted3/335ms3280 KiB
18Wrong answer0/3384ms4532 KiB
19Accepted3/382ms4516 KiB
20Accepted3/3107ms4964 KiB
21Accepted3/3194ms5260 KiB
22Time limit exceeded0/4497ms3212 KiB