제출 #1187829

#제출 시각아이디문제언어결과실행 시간메모리
1187829hamzabc카니발 티켓 (IOI20_tickets)C++20
27 / 100
503 ms71096 KiB
#include "tickets.h"
#include <bits/stdc++.h>


using namespace std;
#define all(x) x.begin(), x.end()


long long find_maximum(int k, vector<vector<int>> x) {
	int n = x.size();
	int m = x[0].size();
	vector<vector<int>> answer(n, vector<int>(m, -1));
	vector<array<int, 3>> arr(n * m);
	k = min(k, m);
	for (int i = 0; i < n * m; i++){
		arr[i][0] = x[i / m][i % m];
		arr[i][1] = i / m;
		arr[i][2] = i % m;
	}
	sort(all(arr));
	vector<vector<array<int, 5>>> mainarray(n, vector<array<int, 5>>(k));
	vector<int> indd(n);
	int ort = arr[arr.size() / 2][0];
	for (int i = 0; i < arr.size(); i++){
		if (indd[arr[i][1]] < k){
			mainarray[arr[i][1]][indd[arr[i][1]]][0] = ort - arr[i][0];
			mainarray[arr[i][1]][indd[arr[i][1]]][1] = arr[i][1];
			mainarray[arr[i][1]][indd[arr[i][1]]][2] = arr[i][2];
			indd[arr[i][1]]++;
		}
	}
	for (int i = arr.size() - 1; i >= 0; i--){
		if (indd[arr[i][1]] > 0){
			indd[arr[i][1]]--;
			mainarray[arr[i][1]][indd[arr[i][1]]][0] -= arr[i][0] - ort;
			mainarray[arr[i][1]][indd[arr[i][1]]][3] = arr[i][1];
			mainarray[arr[i][1]][indd[arr[i][1]]][4] = arr[i][2];
		}
	}
	priority_queue<array<int, 2>> pque;
	for (int i = 0; i < n; i++){
		pque.push({ mainarray[i][0][0], i });
	}
	for (int i = 0; i < n * k / 2; i++){
		auto f = pque.top();
		pque.pop();
		indd[f[1]]++;
		if (indd[f[1]] < k){
			pque.push({ mainarray[f[1]][indd[f[1]]][0], f[1] });
		}
	}
	vector<array<int, 2>> lft, rgt;
	long long ret = 0;
	for (int i = 0; i < n; i++){
		for (int j = 0; j < indd[i]; j++){
			ret -= x[mainarray[i][j][1]][mainarray[i][j][2]];
			lft.push_back({ mainarray[i][j][1], mainarray[i][j][2] });
		}
		for (int j = indd[i]; j < k; j++){
			ret += x[mainarray[i][j][3]][mainarray[i][j][4]];
			rgt.push_back({ mainarray[i][j][3], mainarray[i][j][4] });
		}
	}
	for (int i = 0; i < rgt.size(); i++){
		answer[rgt[i][0]][rgt[i][1]] = i % k;
	}
	for (int i = 0; i < lft.size(); i++){
		answer[lft[i][0]][lft[i][1]] = i % k;
	}
	allocate_tickets(answer);
	return ret;
}
#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...