Submission #1230669

#TimeUsernameProblemLanguageResultExecution timeMemory
1230669PlayVoltzCarnival Tickets (IOI20_tickets)C++20
11 / 100
1 ms840 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

struct trio{
	int x, i, j;
};

bool custom(trio a, trio b){
	return a.x<b.x;
}

long long find_maximum(int k, vector<vector<int> > x){
	int n=x.size(), m=x[0].size();
	long long res=0;
	vector<int> p(n, 0);
	vector<vector<int> > ans(n, vector<int>(m, -1)), ord(k);
	vector<trio> vect;
	for (int i=0; i<n; ++i)for (int j=0; j<m; ++j)vect.pb({x[i][j], i, j});
	sort(vect.begin(), vect.end(), custom);
	for (int i=0; i<n*m/2; ++i){
		if (p[vect[i].i]<k)ans[vect[i].i][vect[i].j]=p[vect[i].i], ++p[vect[i].i];
		if (p[vect[n*m-i-1].i]<k)ans[vect[n*m-i-1].i][vect[n*m-i-1].j]=p[vect[n*m-i-1].i], ++p[vect[n*m-i-1].i];
	}
	for (int i=0; i<n; ++i)for (int j=0; j<k; ++j)ord[ans[i][j]].pb(x[i][j]);
	for (int i=0; i<k; ++i){
		sort(ord[i].begin(), ord[i].end());
		for (auto a:ord[i])res+=abs(a-ord[i][n/2]);
	}
	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...