2362021-03-05 13:54:06Babják PéterÓvodacpp11Részben helyes 32/50488ms20916 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ÖsszpontTesztVerdiktIdőMemória
base32/50
1Elfogadva0/04ms8212 KiB
2Elfogadva0/07ms8708 KiB
3Elfogadva2/24ms8196 KiB
4Elfogadva2/24ms8204 KiB
5Részben helyes1/24ms8208 KiB
6Elfogadva2/24ms8216 KiB
7Elfogadva2/24ms8340 KiB
8Elfogadva2/24ms8216 KiB
9Elfogadva2/24ms8224 KiB
10Elfogadva2/24ms8224 KiB
11Elfogadva2/24ms8236 KiB
12Részben helyes1/24ms8244 KiB
13Elfogadva2/24ms8424 KiB
14Részben helyes1/34ms8456 KiB
15Elfogadva3/313ms9644 KiB
16Elfogadva3/385ms11740 KiB
17Elfogadva3/323ms13172 KiB
18Időlimit túllépés0/3458ms8768 KiB
19Részben helyes1/396ms17924 KiB
20Részben helyes1/357ms20916 KiB
21Időlimit túllépés0/3488ms13260 KiB
22Időlimit túllépés0/4488ms14708 KiB