| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 1066297 | ptf62331 | Scales (IOI15_scales) | C++14 | 1 ms | 348 KiB | 
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "scales.h"
#include<bits/stdc++.h>
using namespace std;
#define vec vector
void init(int T) {
    /* ... */
}
void orderCoins() {
    /* ... */
    int w[] = {1, 2, 3, 4, 5, 6};
	answer(w);return;
	vec<int> right_part{4, 5, 6};
	vec<int> left_part{1,2,3};
	int x = getHeaviest(1, 2, 3);
	left_part.erase(find(left_part.begin(), left_part.end(), x));
	int y = getHeaviest(4, 5, 6);
	right_part.erase(find(right_part.begin(), right_part.end(), y));
	int z = getNextLightest(y, left_part[0], left_part[1], x);
	vec<int> cur{};
	vec<int> rem{};
	if(z != y) {
		swap(x, y);
		if(z == left_part[1]) {
			swap(left_part[0], left_part[1]);
		}
		int med = getMedian(left_part[0], left_part[1], x);
		if(med == left_part[0]) {
			left_part.insert(left_part.begin()+0, x);
		}
		else if(med == x) {
			left_part.insert(left_part.begin()+1, x);
		}
		else {
			assert(med == left_part[1]);
			left_part.insert(left_part.begin()+2, x);
		}
		cur = left_part;
		left_part.push_back(y);
		rem = right_part;
	}
	else {
		int med = getMedian(left_part[0], left_part[1], x);
		if(med != left_part[1]) {
			swap(left_part[0], left_part[1]);
		}
		cur = left_part;
		cur.push_back(x);
		cur.push_back(y);
		rem = right_part;
	}
	 assert(rem.size() == 2);
	// y > x
	 //cur is sorted
	 // for rem we know only they're less than two last
	 int a = getLightest(rem[0], rem[1], cur[0]);
	 if(a==cur[0]) {
		 int b = getLightest(rem[0], rem[1], cur[1]);
		 if(b==cur[1]) {
			 int c = getLightest(rem[0], rem[1], cur[2]);
			 if(c==rem[1]) swap(rem[0], rem[1]);
			 cur.insert(cur.begin()+2, rem[1]);
			 cur.insert(cur.begin()+2, rem[2]);
			 rem =  {};
		 }
		else {
			if(b == rem[1]) swap(rem[0], rem[1]);
			cur.insert(cur.begin()+1, rem[0]);
			rem.erase(rem.begin());
			int c = getLightest(rem[0], cur[1], cur[2]);
			if(c == cur[1]) {
				cur.insert(cur.begin()+3, rem[0]);
				rem = {};
			}
			else {
				cur.insert(cur.begin()+2, rem[0]);
				rem = {};
			}
		}
	 }
	 else {
		 cur.insert(cur.begin()+0, a);
		 rem.erase(find(rem.begin(), rem.end(), a));
		 int b = getMedian(cur[1], cur[2], rem[0]);
		 if(b==rem[0]) {
			 cur.insert(cur.begin()+2, rem[0]);
		 }
		 else if(b==cur[2]) {
			 cur.insert(cur.begin()+3, rem[0]);
		 }
		 else {
			 assert(b==cur[1]);
			 cur.insert(cur.begin()+1, rem[0]);
		 }
		 rem = {};
	 }
	 assert(cur.size() == 6);
	 for(int i = 0; i<6; i++) {
		 w[i] = cur[i];
		 cerr << w[i] << ' ';
	}
	 cerr << '\n';
    answer(w);
}
Compilation message (stderr)
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
