151182025-02-13 09:43:02ercseferencÓvodacpp17Partially correct 38/50130ms4380 KiB
#include <bits/stdc++.h>
using namespace std;
struct szerep{int kard,meret=0; bool van=0;};
struct gyerek{int szer,sir,kap,ind; bool szerp=0;};
bool has(gyerek n, gyerek m){
    return n.sir>m.sir;}
bool has2(gyerek n, gyerek m){
    return n.ind<m.ind;}
int main()
{
    //ifstream f("szamok.txt");
    int n,m; cin>>n>>m;
    vector<szerep>b(m+1); vector<gyerek>a(n+1);
    for(int i=1; i<=m; i++){cin>>b[i].kard;}
    for(int i=1; i<=n; i++){cin>>a[i].szer; a[i].ind=i;}
    for(int i=1; i<=n; i++){cin>>a[i].sir;}
    sort(a.begin()+1,a.end(),has);
    //for(int i=1; i<=n; i++){cout<<a[i].sir<<" ";}
    vector<int>sirok,ures;
    for(int i=1; i<=n; i++){
        if(b[a[i].szer].meret<b[a[i].szer].kard){
            b[a[i].szer].meret++;
            b[a[i].szer].van=1;
            a[i].kap=a[i].szer;
            a[i].szerp=1;}
        else sirok.push_back(i);}
    for(int i=1; i<=m; i++){
        if(!b[i].van)ures.push_back(i);}
    //cout<<sirok.size()<<" "<<ures.size()<<endl;
    if(sirok.size()>=ures.size()){
        int k=0;
        for(int i=0; i<ures.size(); i++){
            b[ures[i]].van=1;
            a[sirok[k]].kap=ures[i];
            a[sirok[k]].szerp=1;
            k++;}
        vector<int>mn;
        for(int i=1; i<=n; i++)
            {if(a[i].szerp==0)mn.push_back(i);}
        k=1;
        for(int i=0; i<mn.size(); i++){
            while(b[k].meret==b[k].kard)k++;
            a[mn[i]].kap=k;
            a[mn[i]].szerp=1;
            b[k].meret++;}}
    else{
        int k=0;
        for(int i=0; i<sirok.size(); i++){
            b[ures[k]].van=1;
            a[sirok[i]].kap=ures[k];
            a[sirok[k]].szerp=1;
            k++;}
        vector<int>mu;
        for(int i=1; i<=m; i++){if(b[i].van==0)mu.push_back(i);}
        k=n;
        for(int i=0; i<mu.size(); i++){
            while(b[a[k].kap].meret==1)k--;
            b[a[k].kap].meret--;
            sirok.push_back(k);
            a[k].kap=mu[i];
            k--;}}
    int s=0;
    for(int i=0; i<sirok.size(); i++){s+=a[sirok[i]].sir;}
    cout<<s<<endl;
    sort(a.begin()+1, a.end(),has2);
    for(int i=1; i<=n; i++){cout<<a[i].kap<<" ";}
    return 0;
}
SubtaskSumTestVerdictTimeMemory
base38/50
1Accepted0/01ms316 KiB
2Accepted0/06ms316 KiB
3Accepted2/21ms316 KiB
4Accepted2/21ms316 KiB
5Partially correct1/21ms400 KiB
6Accepted2/21ms316 KiB
7Accepted2/21ms316 KiB
8Accepted2/21ms316 KiB
9Accepted2/21ms316 KiB
10Accepted2/21ms316 KiB
11Accepted2/21ms500 KiB
12Partially correct1/21ms500 KiB
13Wrong answer0/22ms316 KiB
14Accepted3/32ms316 KiB
15Wrong answer0/314ms760 KiB
16Wrong answer0/332ms1192 KiB
17Accepted3/348ms1348 KiB
18Accepted3/375ms2660 KiB
19Accepted3/387ms2512 KiB
20Accepted3/398ms2828 KiB
21Partially correct1/3111ms3124 KiB
22Accepted4/4130ms4380 KiB