Submission #1283818

#TimeUsernameProblemLanguageResultExecution timeMemory
1283818Jawad_Akbar_JJCarnival Tickets (IOI20_tickets)C++20
100 / 100
532 ms62168 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include "tickets.h"

using namespace std;
int ind[1505];

long long find_maximum(int k, vector<vector<int>> vec){
	long long n = vec.size(), m = vec[0].size(), Ans = 0;
	vector<vector<int>> alc(n, vector<int> (m, -1));

	vector<pair<int,int>> vc;
	for (int i=0;i<n;i++){
		for (int j=0;j<k;j++)
			Ans += vec[i][m - j - 1], vc.push_back({vec[i][m - (k - j)] + vec[i][j], i});
	}
	sort(begin(vc), end(vc));

	for (int i=0;i<vc.size();i++){
		if (i < k * n / 2)
			Ans -= vc[i].first, ind[vc[i].second]++;
	}

	for (int it=0;it<k;it++){
		vc.clear();
		for (int i=0;i<n;i++)
			vc.push_back({ind[i], i});
		sort(begin(vc), end(vc));

		for (int i=0;i<n;i++){
			auto [vl, id] = vc[i];
			if (i >= n / 2){
				ind[id]--;
				alc[id][ind[id]] = it;
			}
			else{
				vec[id].pop_back();
				alc[id][vec[id].size()] = it;
			}
		}
	}
	allocate_tickets(alc);
	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...