Submission #300923

#TimeUsernameProblemLanguageResultExecution timeMemory
300923faustaadpCarnival Tickets (IOI20_tickets)C++17
25 / 100
1499 ms134600 KiB
#include "tickets.h"
#include <vector>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pb push_back
#define mp make_pair
#define fi first
#define se second
const ll NN = 1505;
ll n, m, k, has, B[NN], K[NN], a[NN][NN];
std::vector<std::vector<int>> answer;
std::vector<std::vector<int>> x;
vector<ll> bes[NN], kec[NN];
void sub1()
{
	vector<ll> tmp;
	for(ll i = 0; i < n; i++)
	{
		answer[i][0] = 0;
		tmp.pb(x[i][0]);	
	}
	sort(tmp.begin(), tmp.end());
	for(ll i = 0; i < n; i++)
		if(i < (n / 2))
			has -= tmp[i];
		else
			has += tmp[i];
}
void sub4()
{
	vector<pair<ll, pair<ll, ll> > >tmp;
	for(ll i = 0; i < n; i++)
		for(ll j = 0; j < m; j++)
			tmp.pb(mp(x[i][j], mp(i, j)));
	sort(tmp.begin(), tmp.end());
	for(ll i = 0; i < (n * m); i++)
		if(i < ((n * m) / 2))
			has -= tmp[i].fi;
		else
		{
			a[tmp[i].se.fi][tmp[i].se.se] = 1;
			has += tmp[i].fi;
		}
	for(ll i = 0; i < n; i++)
	{
		for(ll j = 0; j < m; j++)
		{
			if(a[i][j])
			{
				B[i]++;
				bes[i].pb(j);
			}
			else
			{
				K[i]++;
				kec[i].pb(j);
			}
		}
	}
	for(ll i = 0; i < k; i++)
	{
		vector<pair<ll, ll> > z;
		for(ll j = 0; j < n; j++)
			z.pb(mp(B[j], j));
		sort(z.begin(), z.end());
		for(ll j = 0; j < n; j++)
		{
			ll idx = z[j].se;
			// continue;
			if(j < (n / 2))
			{
				ll temp = kec[idx].back();
				kec[idx].pop_back();
				// cout << idx << " " << temp << "K_\n";
				answer[idx][temp] = i;
			}
			else
			{
				B[idx]--;
				ll temp = bes[idx].back();
				bes[idx].pop_back();
				// cout << idx << " " << temp << "B_\n";
				answer[idx][temp] = i;
			}
		}
	}
}
void sub2()
{

}
long long find_maximum(int tk, std::vector<std::vector<int>> tx) {
	k = tk;
	x = tx;
	n = x.size();
	m = x[0].size();
	for (int i = 0; i < n; i++) {
		std::vector<int> row(m);
		for (int j = 0; j < m; j++) {
			row[j] = -1;
		}
		answer.push_back(row);
	}
	if(m == 1)
		sub1();
	else
	if(k == m)
		sub4();
	allocate_tickets(answer);
	return has;
}
#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...