제출 #1291719

#제출 시각아이디문제언어결과실행 시간메모리
1291719lucaskojima카니발 티켓 (IOI20_tickets)C++17
0 / 100
1 ms340 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]);

	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] == 0)
				a[i].push_back(j);
			else
				b[i].push_back(j);

	vector pos(n, vector<int>(m));
	long long ans = 0;

	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;
			ans += x[id][b[id].back()];
			b[id].pop_back();
		}
		for (int i = n / 2; i < n; i++) {
			int id = ord[i];
			pos[id][a[id].back()] = vez;
			ans -= x[id][a[id].back()];
			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...