제출 #405913

#제출 시각아이디문제언어결과실행 시간메모리
405913ngrace카니발 티켓 (IOI20_tickets)C++14
11 / 100
2 ms860 KiB
#include "tickets.h"
#include <bits/stdc++.h>
using namespace std;
 
#define p pair
#define pq priority_queue
#define v vector
#define card pair<int,pair<int,int>>

long long find_maximum(int k, v<v<int>> x) {
    long long out=0;
    int n=x.size();//num colours
    int m=x[0].size();//num of each colour
    
    pq<card> mi;
 
    v<v<card>> l(n);
    v<v<card>> s(n);
    
    v<v<int>> answer(n,v<int>(m,-1));
    
    for(int i=0;i<n;i++){//initilize long list
        pq<card> ma;
        for(int j=0;j<m;j++){
            ma.push({x[i][j],{i,j}});
            mi.push({-x[i][j],{i,j}});
        }
        for(int j=0;j<k;j++){
            card cur=ma.top();
            ma.pop();
            l[i].push_back(cur);
        }
    }
    int count=0;
    while(count<k*n/2){//transfer to short list
        card cur = mi.top();
        mi.pop();
        int colInd=cur.second.first;
        if(l[colInd].size()>0){
            l[colInd].pop_back();
            s[colInd].push_back({-cur.first,cur.second});
            count++;
        }
    }
    for(int i=0;i<k;i++){//allocate
        int sm=0;
        int la=0;
        for(int j=0;j<n;j++){
            bool takeL=true;
            if(sm==n/2){
                takeL=true;
            }
            else if(la==n/2){
                takeL=false;
            }
            else if(l[j].size()>0){
                takeL=true;
            }
            else{
                takeL=false;
            }
            if(takeL){
                card cur=l[j][l[j].size()-1];
                answer[j][cur.second.second]=i;
                out+=cur.first;
                l[j].pop_back();
                la++;
            }
            else{
                card cur=s[j][s[j].size()-1];
                answer[j][cur.second.second]=i;
                out-=cur.first;
                s[j].pop_back();
                sm++;
            }
        }
    }
	allocate_tickets(answer);
    return out;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...