Submission #1230665

#TimeUsernameProblemLanguageResultExecution timeMemory
1230665PlayVoltzCarnival Tickets (IOI20_tickets)C++20
0 / 100
0 ms328 KiB
#include "tickets.h"
#include <bits/stdc++.h>
using namespace std;

#define pii pair<int, int>
#define mp make_pair
#define pb push_back
#define fi first
#define se second

long long find_maximum(int k, vector<vector<int> > x){
	int n=x.size(), m=x[0].size(), res=0;
	vector<int> p(n, 0);
	vector<vector<int> > ans(n, vector<int>(m, -1));
	vector<vector<pii> > vect(n, vector<pii>(m));
	for (int i=0; i<n; ++i)for (int j=0; j<m; ++j)vect[i][j]=mp(x[i][j], j);
	for (int i=0; i<n; ++i)sort(vect[i].begin(), vect[i].end());
	for (int i=0; i<k; ++i){
		vector<bool> done(n, 0);
		vector<pair<int, pii> > ord(2*n), take;
		for (int j=0; j<n; ++j)ord[j]=mp(vect[j][p[j]].fi, mp(j, vect[j][p[j]].se)), ord[j+n]=mp(vect[j].back().fi, mp(j, vect[j].back().se));
		sort(ord.begin(), ord.end());
		for (int j=0; j<n/2; ++j)done[ord[j].se.fi]=1, ++p[ord[j].se.fi], take.pb(ord[j]);
		for (int j=2*n-1; j>=0; --j)if (!done[ord[j].se.fi])done[ord[j].se.fi]=1, vect[ord[j].se.fi].pop_back(), take.pb(ord[j]);
		sort(take.begin(), take.end());
		for (int j=0; j<n; ++j)res+=abs(take[j].fi-take[n/2].fi), ans[take[j].se.fi][take[j].se.se]=i;
	}
	allocate_tickets(ans);
	return res;
}
#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...