236 2021. 03. 05 13:54:06 Babják Péter Óvoda cpp11 Részben helyes 32/50 488ms 20916 KiB
#include<bits/stdc++.h>
#define int long long
#define N 100100
using namespace std;
struct d
{
    int id,sir;
};
struct cmp
{
    bool operator()( d &a, d&b)
    {
        return a.sir>b.sir;
    }
};

int n,m;
int akar[N];
int sir[N];
int mxgy[N];
int cnt[N];
vector<int>lst;
bool nempt[N];
priority_queue<d,vector<d>,cmp>ps;
priority_queue<d,vector<d>,cmp>aps[N];
signed main()
{
    ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
    cin>>n>>m;
    for(int i=0;i<m;i++)
    {
        cin>>mxgy[i];
    }
    for(int i=0;i<n;i++)
    {
        cin>>akar[i];
        akar[i]--;
    }
    for(int i=0;i<n;i++)
    {
        cin>>sir[i];
        d dd;dd.id=i;dd.sir=sir[i];//szintén nem engedi a {} et.:/
        aps[akar[i]].push(dd);
    }
    for(int i=0;i<m;i++)
    {
        while(aps[i].size()>mxgy[i])
        {
            ps.push(aps[i].top());
            aps[i].pop();
        }
    }
    int mn=LONG_LONG_MAX;//ll?
    int mnj=0;
    int sum=0;
    for(int i=0;i<m;i++)
    {
        if(aps[i].size()==0)
        {
            if(ps.empty()==0)
            {
                akar[ps.top().id]=i;
                sum+=ps.top().sir;
                ps.pop();
            }
            else
            {
            	mn=LONG_LONG_MAX;
                for(int j=0;j<m;j++)
                {
                    if(aps[j].size()>1 && aps[j].top().sir<mn)
                    {
                        mn=aps[j].top().sir;
                        mnj=j;
                    }
                }
                akar[aps[mnj].top().id]=i;
                sum+=mn;
                aps[mnj].pop();
            }
        }
    }
    while(!ps.empty())
    {
    	sum+=ps.top().sir;
    	for(int i=0;i<m;i++)
    	{
    		if(aps[i].size()<mxgy[i])
    		{
    			akar[ps.top().id]=i;
			}
		}
    	ps.pop();
	}
    cout<<sum<<"\n";
    for(int i=0;i<n;i++)
    {
        cout<<akar[i]+1<<" ";
    }
    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 32/50
1 Elfogadva 0/0 4ms 8212 KiB
2 Elfogadva 0/0 7ms 8708 KiB
3 Elfogadva 2/2 4ms 8196 KiB
4 Elfogadva 2/2 4ms 8204 KiB
5 Részben helyes 1/2 4ms 8208 KiB
6 Elfogadva 2/2 4ms 8216 KiB
7 Elfogadva 2/2 4ms 8340 KiB
8 Elfogadva 2/2 4ms 8216 KiB
9 Elfogadva 2/2 4ms 8224 KiB
10 Elfogadva 2/2 4ms 8224 KiB
11 Elfogadva 2/2 4ms 8236 KiB
12 Részben helyes 1/2 4ms 8244 KiB
13 Elfogadva 2/2 4ms 8424 KiB
14 Részben helyes 1/3 4ms 8456 KiB
15 Elfogadva 3/3 13ms 9644 KiB
16 Elfogadva 3/3 85ms 11740 KiB
17 Elfogadva 3/3 23ms 13172 KiB
18 Időlimit túllépés 0/3 458ms 8768 KiB
19 Részben helyes 1/3 96ms 17924 KiB
20 Részben helyes 1/3 57ms 20916 KiB
21 Időlimit túllépés 0/3 488ms 13260 KiB
22 Időlimit túllépés 0/4 488ms 14708 KiB