제출 #1172534

#제출 시각아이디문제언어결과실행 시간메모리
1172534hyakup카니발 티켓 (IOI20_tickets)C++20
11 / 100
1 ms836 KiB
#include "tickets.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int, int>

long long find_maximum(int k, vector<vector<int>> v){
	int n = v.size(), m = v[0].size();
	vector<pii> ordem;
	for( int i = 0; i < n; i++ ) for( int j = 0; j < m; j++ ) ordem.push_back({ v[i][j], i*m + j });

	sort( ordem.begin(), ordem.end() );

	vector<vector<int>> vmax(n), vmin(n);

	ll sum = 0;
	for( int i = 0; i < (int)ordem.size()/2; i++ ) vmin[ordem[i].second/m].push_back(ordem[i].second);
	for( int i = (int)ordem.size()/2; i < (int)ordem.size(); i++ ) vmax[ordem[i].second/m].push_back(ordem[i].second);

  vector<vector<int>> resp(n, vector<int>(m, -1));

	for( int i = 0; i < k; i++ ){
    vector<int> marc(n);
    vector<int> round;
    int aux = 0;
		for( int j = 0; j < n; j++ ){
			if( vmax[j].size() > vmin[j].size() ){
        aux++;
        marc[j] = true;
				int id = vmax[j].back(); vmax[j].pop_back();
        round.push_back(v[id/m][id%m]);
				resp[id/m][id%m] = i;
			}
			else if( vmax[j].size() < vmin[j].size() ){
        aux--;
        marc[j] = true;
				int id = vmin[j].back(); vmin[j].pop_back();
        round.push_back(v[id/m][id%m]);
				resp[id/m][id%m] = i;
			}
		}
    for( int j = 0; j < n; j++ ) if( !marc[j] ){
			if( aux <= 0 ){
				int id = vmax[j].back(); vmax[j].pop_back();
        round.push_back(v[id/m][id%m]);
				resp[id/m][id%m] = i;
        aux++;
			}
			else{
				int id = vmin[j].back(); vmin[j].pop_back();
        round.push_back(v[id/m][id%m]);
				resp[id/m][id%m] = i;
        aux--;
			}
    }

    sort( round.begin(), round.end() );
    for( int i = 0; i < n/2; i++ ) sum += round[n - i - 1] - round[i]; 
	}
	allocate_tickets(resp);

	return sum;
}
#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...