Submission #1142881

#TimeUsernameProblemLanguageResultExecution timeMemory
1142881PagodePaiva카니발 티켓 (IOI20_tickets)C++20
11 / 100
6 ms9800 KiB
#include<bits/stdc++.h>
#include "tickets.h"
#include <vector>

using namespace std;

const int N = 1510;
const long long inf = 1e18;
int ans[N][N];
int l[N], r[N];
long long dp[N][N];
int cnt[N];
set <int> linhas;
int best[N][N];

long long find_maximum(int k, std::vector<std::vector<int>> x) {
	int n = x.size();
	int m = x[0].size();
	vector <array <int, 3>> valores;
	for(int i = 0;i < n;i++){
		l[i] = x[i][0];
		r[i] = x[i][m-1];
		valores.push_back({l[i], i, 0});
		valores.push_back({r[i], i, 1});
		linhas.insert(i);
	}
	sort(valores.begin(),valores.end());
	memset(ans, -1, sizeof ans);
	int qtdmin = n/2;
	long long res = 0;
	for(int i = 0;i < n;i++){
		cnt[valores[i][1]]++;
		if(cnt[valores[i][1]] == 2){
			ans[valores[i][1]][0] = 0;
			res -= l[valores[i][1]];
			linhas.erase(valores[i][1]);
			qtdmin--;
		}
	}
	for(int i = 0;i < n;i++){
		if(cnt[i] == 0){
			ans[i][m-1] = 0;
			linhas.erase(i);
			res += r[i];
		}
	}
	int con = 1;
	dp[0][0] = 0;
	for(int i = 1;i <= qtdmin;i++){
		dp[0][i] = -inf;
	}
	for(auto x : linhas){
		for(int i = 0;i <= qtdmin;i++){
			dp[con][i] = dp[con-1][i]+r[x];
			best[con][i] = i;
			if(i > 0)
				if(dp[con][i] < dp[con-1][i-1]-l[x]){
				dp[con][i] = dp[con-1][i-1]-l[x];
				best[con][i] = i-1;
			}
		}
		con++;
	}
	res += dp[con-1][qtdmin];
	while(con > 1){
		auto it = linhas.end();
		it--;
		linhas.erase(it);
		int x = *it;
		if(best[con][qtdmin]-qtdmin == 0){
			ans[x][m-1] = 0;
		}
		else{
			ans[x][0] = 0;
			qtdmin--;
		}
		con--;
	}
	vector <vector <int>> answer;
	for(int i = 0;i < n;i++){
		vector <int> aux;
		for(int j = 0;j < m;j++){
			aux.push_back(ans[i][j]);
		}
		answer.push_back(aux);
	}
	allocate_tickets(answer);
	return res;
}
#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...