Submission #300932

#TimeUsernameProblemLanguageResultExecution timeMemory
300932SortingCarnival Tickets (IOI20_tickets)C++17
100 / 100
931 ms54264 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<vector<int>> c(n, vector<int>(m, -1));

	int iter = n / 2 * k;
	priority_queue<array<int, 2>, vector<array<int, 2>>, greater<array<int, 2>>> pq;
	long long ans = 0;
	vector<int> pos(n, 0);

	for(int i = 0; i < n; ++i)
		for(int j = m - k; j < m; ++j)
			ans += x[i][j];

	for(int i = 0; i < n; ++i)
		pq.push({x[i][0] + x[i][m - k], i});

	for(int i = 0; i < iter; ++i){
		auto [sub, idx] = pq.top();
		pq.pop();

		ans -= sub;
		pos[idx]++;
		if(pos[idx] + m - k < m)
			pq.push({x[idx][pos[idx]] + x[idx][pos[idx] + m - k], idx});
	}

	int idx = 0;
	for(int i = 0; i < n; ++i){
		int j1 = 0, j2 = pos[i] + m - k;
		while(j1 != pos[i]){
			c[i][j1] = idx;
			idx++, j1++;
			if(idx == k) idx = 0;
		}
		int idx2 = idx;
		while(j2 != m){
			c[i][j2] = idx2;
			idx2++, j2++;
			if(idx2 == k) idx2 = 0;
		}
	}
	
	allocate_tickets(c);
	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...