4751 2023. 03. 31 11:02:50 gortomi Óvoda cpp17 Hibás válasz 28/50 68ms 18424 KiB
#include <bits/stdc++.h>
using namespace std;
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n, k;
    cin >> n >> k;
    vector<int> maxi(k + 1), w(n + 1), cry(n + 1), used(k + 1);
    for(int i = 1; i <= k; i++)
    {
        cin >> maxi[i];
    }
    vector<vector<pair<int, int> > > r(k + 1);
    for(int i = 1; i <= n; i++) cin >> w[i];
    for(int i = 1; i <= n; i++) cin >> cry[i];
    vector<pair<int, int> > all;
    for(int i = 1; i <= n; i++)
    {
        r[w[i]].push_back({cry[i], i});
    }
    vector<int> ans(n + 1);
    int sum = 0;
    for(int i = 1; i <= k; i++)
    {
        int a = r[i].size();
        used[i] = min(maxi[i], a);
        sort(r[i].begin(), r[i].end(), greater<pair<int, int> >());
        for(int j = 0; j < min(maxi[i], a); j++)
        {
            all.push_back(r[i][j]);
            ans[r[i][j].second] = i;
        }
        for(int j = maxi[i]; j < r[i].size(); j++)
        {
            all.push_back({0, r[i][j].second});
            sum += r[i][j].first;
        }
    }
    sort(all.begin(), all.end());
    int c = 0;
    int z = 1;

    while(z <= k)
    {
        while(z <= k && used[z] > 0) z++;
        if(z > k) break;
        while(all[c].first != 0 && used[w[all[c].second]] <= 1)
        {
            c++;
            if(c >= all.size())
            {
                exit(0);
            }
        }
        used[z]++;
        int ind = all[c].second;
        if(all[c].first != 0)
        {
            used[w[ind]]--;
            sum += all[c].first;
        }
        ans[ind] = z;
    }
    int l = 1;
    cout << sum << "\n";
    for(int i = 1; i <= n; i++)
    {
        if(ans[i] == 0)
        {
            while(used[l] == maxi[l]) l++;
            ans[i] = l;
            used[l]++;
        }
        cout << ans[i] << " ";
    }
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 28/50
1 Elfogadva 0/0 3ms 1708 KiB
2 Hibás válasz 0/0 4ms 2600 KiB
3 Elfogadva 2/2 3ms 2292 KiB
4 Elfogadva 2/2 3ms 2244 KiB
5 Futási hiba 0/2 3ms 2508 KiB
6 Elfogadva 2/2 3ms 2540 KiB
7 Hibás válasz 0/2 3ms 2756 KiB
8 Elfogadva 2/2 2ms 2816 KiB
9 Elfogadva 2/2 3ms 2816 KiB
10 Elfogadva 2/2 3ms 2880 KiB
11 Elfogadva 2/2 3ms 3112 KiB
12 Részben helyes 1/2 3ms 3172 KiB
13 Hibás válasz 0/2 3ms 3392 KiB
14 Elfogadva 3/3 3ms 3408 KiB
15 Hibás válasz 0/3 8ms 4856 KiB
16 Futási hiba 0/3 17ms 7112 KiB
17 Elfogadva 3/3 25ms 7220 KiB
18 Hibás válasz 0/3 39ms 11428 KiB
19 Elfogadva 3/3 43ms 10284 KiB
20 Elfogadva 3/3 48ms 10600 KiB
21 Részben helyes 1/3 56ms 11776 KiB
22 Hibás válasz 0/4 68ms 18424 KiB