Submission #832181

#TimeUsernameProblemLanguageResultExecution timeMemory
832181penguinmanCarnival Tickets (IOI20_tickets)C++17
25 / 100
716 ms144872 KiB
#include "tickets.h"
#include <bits/stdc++.h>

using std::cin;
using std::cout;
using std::endl;
using std::vector;
using std::string;
using ll = long long;
using vi = vector<ll>;
using vii = vector<vi>;
using pii = std::pair<ll,ll>;

#define ln "\n"
#define rep(i,j,k) for(ll i=ll(j); i<ll(k); i++)
#define REP(i,j,k) for(ll i=ll(j); i<=ll(k); i++)
#define per(i,j,k) for(ll i=ll(j); i>=ll(k); i--)
#define pb emplace_back
#define mp std::make_pair
#define mtp std::make_tuple
#define all(a) a.begin(),a.end()

long long find_maximum(int k, std::vector<std::vector<int>> x) {
	ll N = x.size();
	ll M = x[0].size();
	assert(M == k);
	{
		vector<std::tuple<ll,ll,ll>> data;
		rep(i,0,N){
			rep(j,0,M) data.pb(mtp(x[i][j],i,j));
		}
		sort(all(data));
		ll ans = 0;
		ll mid = N*M/2;
		vii left(N), right(N);
		rep(i,0,mid){
			ll val, I,J; std::tie(val, I,J) = data[i];
			left[I].pb(J);
			ans -= val;
		}
		rep(i,mid,N*M){
			ll val, I,J; std::tie(val, I,J) = data[i];
			right[I].pb(J);
			ans += val;
		}
		vector<vector<int>> allocate(N,vector<int>(M,-1));
		vector<pii> cnt(M);
		rep(i,0,M) cnt[i] = mp(0,i);
		rep(i,0,N){
			sort(all(cnt));
			ll idx = 0;
			for(auto el: left[i]){
				allocate[i][el] = cnt[idx].second;
				cnt[idx].first++;
				idx++;
			}
			for(auto el: right[i]){
				allocate[i][el] = cnt[idx].second;
				cnt[idx].first--;
				idx++;
			}
		}
		allocate_tickets(allocate);
		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...