Submission #1153209

#TimeUsernameProblemLanguageResultExecution timeMemory
1153209SharkyCarnival Tickets (IOI20_tickets)C++20
25 / 100
635 ms76388 KiB
#include "tickets.h"
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

ll find_maximum(int k, std::vector<std::vector<int>> x) {
	int n = x.size();
	int m = x[0].size();
	vector<vector<int>> answer(n, vector<int> (m, -1));
	ll ans = 0;
	vector<array<int, 3>> val;
	for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) val.push_back({x[i][j], i, j});
	sort(val.begin(), val.end(), [] (auto i, auto j) { return i[0] > j[0]; });
	vector<queue<int>> stk(n), stk2(n);
	for (int i = 0; i < (n * m) / 2; i++) {
		ans += val[i][0];
		stk[val[i][1]].push(val[i][2]);
	}
	for (int i = (n * m) / 2; i < n * m; i++) {
		ans -= val[i][0];
		stk2[val[i][1]].push(val[i][2]);
	}
	for (int rd = 0; rd < m; rd++) {
		vector<pair<int, int>> sz;
		for (int i = 0; i < n; i++) sz.push_back({stk[i].size(), i});
		sort(sz.rbegin(), sz.rend());
		for (int i = 0; i < n/2; i++) {
			int tp = stk[sz[i].second].front();
			stk[sz[i].second].pop();
			answer[sz[i].second][tp] = rd;
		}
		for (int i = n/2; i < n; i++) {
			int tp = stk2[sz[i].second].front();
			stk2[sz[i].second].pop();
			answer[sz[i].second][tp] = rd;
		}
	}
	allocate_tickets(answer);
	return ans;
}
#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...