제출 #1291713

#제출 시각아이디문제언어결과실행 시간메모리
1291713lucaskojima카니발 티켓 (IOI20_tickets)C++17
25 / 100
465 ms66384 KiB
#include "bits/stdc++.h"
#include "tickets.h"
#define sz(x) (int)size(x)
#define all(x) begin(x), end(x)
#define rall(x) rbegin(x), rend(x)

using namespace std;
using ll = long long;
using pii = pair<int, int>;

const char nl = '\n';
const int INF = 0x3f3f3f3f;
const ll LINF = 0x3f3f3f3f3f3f3f3f;

long long find_maximum(int k, vector<vector<int>> x) {
	int n = sz(x);
	int m = sz(x[0]);
	int t = n * m;

	vector<int> vals;
	for (int i = 0; i < n; i++)
		for (int j = 0; j < m; j++)
			vals.push_back(x[i][j]);

	sort(all(vals));
	int X = vals[t / 2]; // >= X eh grande

	long long ans = 0;
	for (int i = 0; i < t / 2; i++)
		ans -= vals[i];
	for (int i = t / 2; i < t; i++)
		ans += vals[i];

	vector<vector<int>> a(n), b(n);
	for (int i = 0; i < n; i++)
		for (int j = 0; j < m; j++)
			if (x[i][j] < X)
				a[i].push_back(j);
			else
				b[i].push_back(j);

	vector pos(n, vector<int>(m));

	for (int vez = 0; vez < k; vez++) {
		vector<int> ord(n);
		iota(all(ord), 0);

		sort(all(ord), [&](const int &i, const int &j){
			return sz(b[i]) > sz(b[j]);
		});

		for (int i = 0; i < n / 2; i++) {
			int id = ord[i];
			pos[id][b[id].back()] = vez;
			b[id].pop_back();
		}
		for (int i = n / 2; i < n; i++) {
			int id = ord[i];
			pos[id][a[id].back()] = vez;
			a[id].pop_back();
		}
	}

	allocate_tickets(pos);
	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...