Submission #591674

#TimeUsernameProblemLanguageResultExecution timeMemory
591674Soumya1Carnival Tickets (IOI20_tickets)C++17
100 / 100
628 ms55996 KiB
#include "tickets.h"
#include <bits/stdc++.h>
using namespace std;
long long find_maximum(int k, vector<vector<int>> x) {
	int n = x.size();
	int m = x[0].size();
	vector<int> ptr(n);
	priority_queue<pair<int, int>> pq;
	for (int i = 0; i < n; i++) pq.push({-x[i][0] - x[i][m - k], i});
	long long ret = 0;
	int taken = 0;
	while (taken < n * k / 2) {
		auto [val, i] = pq.top();
		pq.pop();
		ptr[i]++;
		if (ptr[i] < k) pq.push({-x[i][ptr[i]] - x[i][m - k + ptr[i]], i});
		taken++;
	}
	int cur = 0;
	vector<int> ending(n);
	vector<vector<int>> ans(n, vector<int> (m, -1));
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < ptr[i]; j++) {
			ret -= x[i][j];
			ans[i][j] = cur++;
			if (cur == k) cur = 0;
		}
		ending[i] = cur;
	}
	for (int i = 0; i < n; i++) {
		cur = ending[i];
		for (int j = 0; j < k - ptr[i]; j++) {
			ret += x[i][m - j - 1];
			ans[i][m - j - 1] = cur++;
			if (cur == k) cur = 0;
		}
	}
	allocate_tickets(ans);
	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...