Submission #1301842

#TimeUsernameProblemLanguageResultExecution timeMemory
1301842nicolo_010Scales (IOI15_scales)C++20
0 / 100
0 ms332 KiB
#include <bits/stdc++.h>
#include "scales.h"
using namespace std;
using ll = long long;
using pii = pair<int, int>;

void init(int t) {
	return;
}

void complete(vector<int> &p) {
	set<int> full;
	for (int i=1; i<=6; i++) {
		full.insert(i);
	}
	for (int i=0; i<3; i++) {
		full.erase(p[i]);
	}
	int a, b, c;
	a=b=c=-1;
	for (auto x : full) {
		if (a==-1) {
			a=x;
		}
		else if (b==-1) {
			b=x;
		}
		else {
			c=x;
		}
	}
	int mx = getHeaviest(a, b, c);
	int md = getLightest(a, b, c);
	full.erase(mx);
	full.erase(md);
	p[3] = *full.begin();
	p[4] = md;
	p[5] = mx;
}

void orderCoins() {
	vector<int> p(6);
	set<int> full;
	set<int> l, r;
	for (int i=1; i<=6; i++) {
		full.insert(i);
		if (i <= 3) {
			l.insert(i);
		}
		else {
			r.insert(i);
		}
	}
	int lmn = getLightest(1, 2, 3);
	int rmn = getLightest(4, 5, 6);
	int mdl = getMedian(1, 2, 3);
	l.erase(lmn);
	l.erase(mdl);
	r.erase(rmn);
	int md = getMedian(lmn, rmn, mdl);
	if (md == mdl) {
		p[0] = lmn;
		p[1] = mdl;
		p[2] = rmn;
		complete(p);
		int a[6];
		for (int i=0; i<6; i++) {
			a[i] = p[i];
		}
		answer(a);
		return;
	}
	else if (md==lmn) {
		p[0] = rmn;
		p[1] = lmn;
		full.erase(rmn);
		full.erase(lmn);
		full.erase(mdl);
	}
	else {
		//lmn < rmn < 
		p[0] = lmn;
		p[1] = rmn;
		full.erase(rmn);
		full.erase(lmn);
		full.erase(mdl);
	}
	int mdr = getMedian(4, 5, 6);
	r.erase(mdr);
	full.erase(mdr);
	int mdd = getMedian(mdl, mdr, *r.begin());
	if (mdd == mdl) {
		p[2] = mdr;
		p[3] = mdl;
		int mnn = getMedian(mdl, *r.begin(), *l.begin());
		p[4] = mnn;
		full.erase(mnn);
		p[5] = *full.begin();
	}
	else if (mdd == *r.begin()) {
		p[2] = mdr;
		p[3] = mdd;
		p[4] = mdl;
		p[5] = *l.begin();
	}
	else {
		int mnn = getMedian(*l.begin(), *r.begin(), mdr);
		p[2] = mdl;
		if (mnn == *l.begin()) {
			p[3] = mdr;
			p[4] = mnn;
			p[5] = *r.begin();
		}
		else if (mnn == mdr) {
			p[3] = *l.begin();
			p[4] = mnn;
			p[5] = *r.begin();
		}
		else {
			p[3] = mdr;
			p[4] = mnn;
			p[5] = *l.begin();
		}
	}
	int a[6];
	for (int i=0; i<6; i++) {
		a[i] = p[i];
	}
	answer(a);
}
#Verdict Execution timeMemoryGrader output
Fetching results...