제출 #1283821

#제출 시각아이디문제언어결과실행 시간메모리
1283821Jawad_Akbar_JJ카니발 티켓 (IOI20_tickets)C++20
27 / 100
265 ms60924 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include "tickets.h"

using namespace std;
int ind[1505];
vector<int> rnd[1505];

long long find_maximum(int k, vector<vector<int>> vec){
	long long n = vec.size(), m = vec[0].size(), Ans = 0;
	vector<vector<int>> alc(n, vector<int> (m, -1));

	for (int it=0;it<k;it++){
		long long ans = 0;
		vector<pair<int,int>> vc;
		for (int i=0;i<n;i++){
			ans += vec[i].back();
			vc.push_back({-vec[i].back() - vec[i][ind[i]], i});
		}
		sort(begin(vc), end(vc));

		for (int i=n-1;i>=0;i--){
			auto [vl, Id] = vc[i];
			if (i < n / 2){
				alc[Id][vec[Id].size() - 1] = it;
				vec[Id].pop_back();
			}
			else{
				alc[Id][ind[Id]++] = it;
				ans += vl;
			}
		}
	}

	for (int i=0;i<n;i++){
		for (int j=0;j<m;j++)
			if (alc[i][j] != -1)
				rnd[alc[i][j]].push_back(vec[i][j]);
	}

	for (int i=0;i<k;i++){
		sort(begin(rnd[i]), end(rnd[i]));
		long long ans = 0;
		for (int j=0;j<n;j++)
			ans += rnd[i][j] * (j < n / 2 ? -1 : +1);
		Ans += ans;
	}

	allocate_tickets(alc);
	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...