Submission #1228352

#TimeUsernameProblemLanguageResultExecution timeMemory
1228352LudisseyCarnival Tickets (IOI20_tickets)C++20
0 / 100
1 ms328 KiB
#include "tickets.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define sz(a) (int)a.size()
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()

int n;

int calc(vector<int> v){
	sort(all(v));
	int med=v[(sz(v)-1)/2];
	int ans=0;
	for (int i = 0; i < sz(v); i++) ans+=abs(v[i]-med);
	return ans;
}

long long find_maximum(signed k, std::vector<std::vector<signed>> x) {
	n=sz(x);
	int m=sz(x[0]);
	vector<pair<int,int>> a(n);
	vector<vector<signed>> ret(n,vector<signed>(m,-1));
	vector<queue<int>> on(n);
	vector<queue<int>> off(n);
	for (int i = 0; i < n; i++)
	{
		a[i].second=i;
		for (int j=0; j<m; j++) a[i].first+=x[i][j];
	}
	int sm=0;
	for (int j = 0; j < k;j++)
	{
		sort(all(a));
		vector<int> v(n);
		for (int i = 0; i < n; i++)
		{
			if(i<=(n-1)/2){
				if(a[i].first==m-i) {
					v.push_back(1);
					a[i].first--;
					on[a[i].second].push(j);
				}
				else{
					off[a[i].second].push(j);
					v.push_back(0);
				}
			}else{
				if(a[i].first==0) {
					off[a[i].second].push(j);
					v.push_back(0);

				}
				else{
					v.push_back(1);
					a[i].first--;
					on[a[i].second].push(j);
				}
			}
		}
		sm+=calc(v);
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			if(x[i][j]==0){
				while(!off[i].empty()){
					ret[i][j]=off[i].front(); off[i].pop();
					break;
				}
			}else{
				while(!on[i].empty()){
					ret[i][j]=on[i].front(); on[i].pop();
					break;
				}
			}
		}
		
	}
	allocate_tickets(ret);
	return sm;
}
#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...