제출 #1239590

#제출 시각아이디문제언어결과실행 시간메모리
1239590Ghulam_Junaid카니발 티켓 (IOI20_tickets)C++20
100 / 100
535 ms54296 KiB
#include <bits/stdc++.h>
#include "tickets.h"
// #include "grader.cpp"
using namespace std;

typedef long long ll;

ll find_maximum(int k, vector<vector<int>> x) {
	int n = x.size();
	int m = x[0].size();
	vector<vector<int>> output;
    output.resize(n);
    for (int i = 0; i < n; i ++)
        output[i].resize(m, -1);

    ll res = 0;
    int mn[n], mx[n], mxp[n];
    priority_queue<pair<int, int>> pq;
    for (int i = 0; i < n; i ++){
        for (int j = 0; j < k; j ++)
            res -= x[i][j];
        mn[i] = k, mx[i] = mxp[i] = 0;
        pq.push({x[i][m - mx[i] - 1] + x[i][mn[i] - 1], i});
    }

    int flips = (n / 2) * k;
    while (flips--){
        auto [inc, col] = (pq.top());
        pq.pop();

        res += inc;
        mn[col]--;
        mx[col]++;

        if (mn[col])
            pq.push({x[col][m - mx[col] - 1] + x[col][mn[col] - 1], col});
    }

    for (int round = 0; round < k; round ++){
        vector<int> mins, maxs;
        while (!pq.empty()) pq.pop();
        for (int i = 0; i < n; i ++){
            if (mx[i] == 0) mins.push_back(i);
            else if (mn[i] == 0) maxs.push_back(i);
            else pq.push({x[i][mn[i] - 1], i});
        }

        while (mins.size() < n / 2){
            mins.push_back((pq.top()).second);
            pq.pop();
        }
        while (pq.size()){
            maxs.push_back((pq.top()).second);
            pq.pop();
        }

        for (int i : mins){
            output[i][mn[i] - 1] = round;
            mn[i]--;
        }
        for (int i : maxs){
            output[i][m - mxp[i] - 1] = round;
            mxp[i]++;
            mx[i]--;
        }
    }

	allocate_tickets(output);
	return res;
}
#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...