제출 #792009

#제출 시각아이디문제언어결과실행 시간메모리
792009mousebeaverCarnival Tickets (IOI20_tickets)C++14
11 / 100
1 ms724 KiB
#define ll long long
#define pll pair<ll, ll>
#include "tickets.h"
#include <bits/stdc++.h>
using namespace std;

long long find_maximum(int k, vector<vector<int>> x)
{
	ll n = x.size();
	ll m = x[0].size();

	if(m == 1)
	{
		vector<vector<int>> output(n, vector<int> (1, 0));
		allocate_tickets(output);
		vector<ll> a(n);
		for(ll i = 0; i < n; i++)
		{
			a[i] = x[i][0];
		}
		sort(a.begin(), a.end());
		ll ans = 0;
		ll add = 0;
		for(ll i = n/2; i >= 0; i--)
		{
			add = a[n/2] - a[i];
			ans += add;
		}
		for(ll i = n/2+1; i < n; i++)
		{
			add = a[i] - a[n/2];
			ans += add;
		}
		return ans;
	}

	vector<ll> zcount(n, 0);
	for(ll i = 0; i < n; i++)
	{
		for(ll j = 0; j < m; j++)
		{
			zcount[i] += x[i][j] = 0;
		}
	}
	vector<pll> zsort(n);
	for(ll i = 0; i < n; i++)
	{
		zsort[i] = {zcount[i], i};
	}
	sort(zsort.begin(), zsort.end());
	vector<bool> big(n, false);
	for(ll i = n/2; i < n; i++)
	{
		big[zsort[i].second] = true;
	}

	vector<vector<int>> output(n, vector<int> (m, -1));
	vector<vector<int>> round(n, vector<int> (k, -1));
	for(ll i = 0; i < n; i++)
	{
		vector<pll> p(m);
		for(ll j = 0; j < m; j++)
		{
			p[j] = {x[i][j], j};
		}
		sort(p.begin(), p.end());

		if(big[i])
		{
			reverse(p.begin(), p.end());	
		}	
		for(ll j = 0; j < k; j++)
		{
			output[i][p[j].second] = j;
			round[i][j] = p[j].second;
		}
	}
	allocate_tickets(output);

	ll ans = 0;
	for(ll j = 0; j < k; j++)
	{
		ll counter = 0; //Counts the ones
		for(ll i = 0; i < n; i++)
		{
			counter += x[i][round[i][j]];
		}
		ans += min(counter, m-counter);
	}

	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...