Submission #1072908

#TimeUsernameProblemLanguageResultExecution timeMemory
1072908LCJLY카니발 티켓 (IOI20_tickets)C++14
25 / 100
865 ms188176 KiB
#include <bits/stdc++.h>
#include "tickets.h"
//#include "grader.cpp"
using namespace std;
 
#define int long long
#define show(x,y) cout << y << " " << #x << endl;
#define show2(x,y,i,j) cout << y << " " << #x << "  " << j << " " << #i << endl;
#define show3(x,y,i,j,p,q) cout << y << " " << #x << "  " << j << " " << #i << "  " << q << " " << #p << endl;
#define show4(x,y) for(auto it:y) cout << it << " "; cout << #x << endl;
typedef pair<long long,long long>pii;
typedef pair<long long,pii>pi2;
 
//allocate_tickets(vector<vector<int>>)
 
long long find_maximum(int32_t k, vector<vector<int32_t>>arr){
	int n=arr.size();
	int m=arr[0].size();
	vector<pi2>v;
	for(int x=0;x<n;x++){
		for(int y=0;y<m;y++){
			v.push_back({arr[x][y],{x,y}});
		}
	}
	sort(v.begin(),v.end());
	int counter=0;
	for(int x=0;x<n*m/2;x++){
		counter+=abs(v[x].first-v[n*m-1-x].first);
	}
	int cnt[n+5];
	memset(cnt,0,sizeof(cnt));
	vector<pi2>storage[n+5];
	vector<pi2>storage2[n+5];
	for(int x=0;x<n*m/2;x++){
		cnt[v[x].second.first]++;
		storage[v[x].second.first].push_back(v[x]);
		storage2[v[x+n*m/2].second.first].push_back(v[x+n*m/2]);
	}

	priority_queue<pii>pq;
	for(int x=0;x<n;x++){
		pq.push({cnt[x],x});
	}
	
	vector<vector<int32_t>>ans;
	ans.resize(n);
	for(int x=0;x<n;x++) ans[x]=vector<int32_t>(m,-1);
	
	for(int x=0;x<m;x++){
		bool take[n+5];
		memset(take,0,sizeof(take));
		vector<pii>temp;
		for(int y=0;y<n/2;y++){
			pii cur=pq.top();
			pq.pop();
			take[cur.second]=true;
			cur.first--;
			temp.push_back(cur);
			pi2 take=storage[cur.second].back();
			storage[cur.second].pop_back();
			ans[take.second.first][take.second.second]=x;
		}
		for(int y=0;y<n;y++){
			if(take[y]) continue;
			pi2 take=storage2[y].back();
			storage2[y].pop_back();
			ans[take.second.first][take.second.second]=x;
		}
		for(auto it:temp) pq.push(it);
	}
	allocate_tickets(ans);
	return counter;
}
#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...