Submission #585930

#TimeUsernameProblemLanguageResultExecution timeMemory
585930Drew_Carnival Tickets (IOI20_tickets)C++17
27 / 100
1378 ms90852 KiB
#include "tickets.h"
#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define f1 first
#define s2 second

using ii = pair<int, int>;
using ll = long long;

ll find_maximum(int K, vector<vector<int>> V)
{
	int N = (int)V.size(), M = (int)V[0].size();
	
	vector<vector<ii>> vec(N, vector<ii>(M));
	for (int i = 0; i < N; ++i)
		for (int j = 0; j < M; ++j)
			vec[i][j] = {V[i][j], j};

	for (int i = 0; i < N; ++i)
		sort(vec[i].begin(), vec[i].end());

	ll S = 0;
	vector<vector<int>> ans(N, vector<int> (M, -1));

	priority_queue<ii> pq;
	vector<bool> used(N, false);
	for (int i = 0; i < K; ++i)
	{
		while (!pq.empty())
			pq.pop();

		if (i+1 == M)
		{
			ll sum = 0;
			for (int j = 0; j < N; ++j)
			{
				sum += vec[j][0].f1;
				pq.push({-2*vec[j][0].f1, 69});
				
				ans[j][vec[j][0].s2] = i;
			}

			for (int j = 0; j < N/2; ++j)
				sum += pq.top().f1, pq.pop();
			
			S += sum;
		}
		else
		{
			fill(used.begin(), used.end(), false);

			ll sum = 0;
			for (int j = 0; j < N; ++j)
			{
				sum += vec[j].back().f1;
				pq.push({-vec[j][0].f1 - vec[j].back().f1, j});
			}

			for (int j = 0; j < N/2; ++j)
			{
				sum += pq.top().f1;
				used[pq.top().s2] = true;
				
				pq.pop();
			}

			for (int j = 0; j < N; ++j)
			{
				if (used[j])
				{
					ans[j][vec[j][0].s2] = i;
					vec[j].erase(vec[j].begin());
				}
				else
				{
					ans[j][vec[j].back().s2] = i;
					vec[j].pop_back();
				}
			}

			S += sum;
		}
	}

	allocate_tickets(ans);
	return S;
}
#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...