Submission #399996

#TimeUsernameProblemLanguageResultExecution timeMemory
399996faresbasbsCarnival Tickets (IOI20_tickets)C++14
100 / 100
931 ms73172 KiB
#include <bits/stdc++.h>
#include "tickets.h"
using namespace std;
int n,m,l[1501],r[1501];

long long find_maximum(int k, vector<vector<int>> x){
	n = x.size() , m = x[0].size();
	vector<vector<int>> ans(n,vector<int>(m,-1));
	vector<pair<int,int>> vals;
	long long ret = 0;
	priority_queue<pair<int,int>> pq;
	for(int i = 0 ; i < n ; i += 1){
		vals.push_back({0,i});
		l[i] = k-1 , r[i] = m-1;
		pq.push({x[i][k-1]+x[i][m-1],i});
	}
	for(int i = 0 ; i < (n*k)/2 ; i += 1){
		pair<int,int> nxt = pq.top();
		pq.pop();
		vals[nxt.second].first += 1;
		l[nxt.second] -= 1 , r[nxt.second] -= 1;
		if(l[nxt.second] != -1){
			pq.push({x[nxt.second][l[nxt.second]]+x[nxt.second][r[nxt.second]],nxt.second});
		}
	}
	for(int i = 0 ; i < n ; i += 1){
		l[i] = 0 , r[i] = m-1;
	}
	for(int i = 0 ; i < k ; i += 1){
		sort(vals.begin(),vals.end());
		for(int j = 0 ; j < n/2 ; j += 1){
			int p = vals[j].second;
			ret -= x[p][l[p]];
			ans[p][l[p]] = i;
			l[p] += 1;
		}
		for(int j = n/2 ; j < n ; j += 1){
			int p = vals[j].second;
			ret += x[p][r[p]];
			ans[p][r[p]] = i;
			r[p] -= 1;
			vals[j].first -= 1;
		}
	}
	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...