Submission #1288875

#TimeUsernameProblemLanguageResultExecution timeMemory
1288875NonozeCarnival Tickets (IOI20_tickets)C++20
27 / 100
314 ms69140 KiB
#include "tickets.h"
#include <bits/stdc++.h>
#define fi first
#define se second
#define sz(x) (int)x.size()
#define cmin(a, b) a=min(a, b)
#define cmax(a, b) a=max(a, b)
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define pb push_back
#define int long long

using namespace std;

int n, m, k;
vector<vector<int>> a;

int find_maximum(signed K, vector<vector<signed>> x) {
	n=sz(x), m=sz(x[0]), k=K;
	a.resize(n, vector<int>(m));
	for (int i=0; i<n; i++) for (int j=0; j<m; j++) a[i][j]=x[i][j];
	int res=0;
	vector<vector<signed>> ans(n, vector<signed>(m, -1));
	while (k--) {
		vector<int> small(n), big(n);
		for (int i=0; i<n; i++) {
			small[i]=a[i][0], big[i]=a[i][0];
			if (ans[i][0]!=-1) small[i]=INT_MAX, big[i]=0;
			for (int j=1; j<m; j++) if (ans[i][j]==-1) cmin(small[i], a[i][j]), cmax(big[i], a[i][j]);
		}
		vector<bool> side(n, 0); for (int i=n/2; i<n; i++) side[i]=1, res+=big[i];
		for (int i=0; i<n/2; i++) res-=small[i];
		while (1) {
			int bestleft=-1, bestright=-1;
			for (int i=0; i<n; i++) {
				if (!side[i]) {
					if (bestleft==-1 || big[i]+small[i]>big[bestleft]+small[bestleft]) bestleft=i;
				} else {
					if (bestright==-1 || big[i]+small[i]<big[bestright]+small[bestright]) bestright=i;
				}
			}
			if (big[bestleft]+small[bestleft]-big[bestright]-small[bestright]>0) {
				side[bestleft]=1, side[bestright]=0;
				res+=big[bestleft]+small[bestleft]-big[bestright]-small[bestright];
			} else break;
		}
		for (int i=0; i<n; i++) {
			int val=small[i];
			if (side[i]) val=big[i];
			for (int j=0; j<m; j++) {
				if (ans[i][j]==-1 && a[i][j]==val) {
					ans[i][j]=k;
					break;
				}
			}
		}
	}
	allocate_tickets(ans);
	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...