#include "scales.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pll;
typedef vector<ll> vl;
const ll LLINF = 1e18;
void init(int T) {
}
void orderCoins() {
int a1[3], a2[3];
{
set<int> s = {1, 2, 3, 4, 5, 6};
a1[0] = getLightest(1, 2, 3);
a2[0] = getLightest(4, 5, 6);
a1[1] = getMedian(1, 2, 3);
a2[1] = getMedian(4, 5, 6);
s.erase(a1[0]);
s.erase(a2[0]);
s.erase(a1[1]);
s.erase(a2[1]);
a1[2] = *s.begin();
a2[2] = *s.rbegin();
}
int ans[6] = {0};
set<int> s1 = {1, 2, 3}, s2 = {4, 5, 6};
{
int midMn = getMedian(a1[0], a1[1], a2[0]);
if (midMn == a1[0]) {
ans[0] = a2[0];
s2.erase(a2[0]);
}
if (midMn == a1[1]) {
ans[0] = a1[0];
ans[1] = a1[1];
s1.erase(a1[0]);
s1.erase(a1[1]);
}
if (midMn == a2[0]) {
ans[0] = a1[0];
ans[1] = a2[0];
s1.erase(a1[0]);
s2.erase(a2[0]);
}
}
{
int midMn = getMedian(a1[2], a2[1], a2[2]);
if (midMn == a2[2]) {
ans[5] = a1[2];
s1.erase(a1[2]);
}
if (midMn == a2[1]) {
ans[5] = a2[2];
ans[4] = a2[1];
s2.erase(a2[2]);
s2.erase(a2[1]);
}
if (midMn == a1[2]) {
ans[5] = a2[2];
ans[4] = a1[2];
s2.erase(a2[2]);
s1.erase(a1[2]);
}
}
if (s1.size() > s2.size()) {
swap(s1, s2);
swap(a1, a2);
}
if ((int)s1.size() == 2 && (int)s2.size() == 2) {
vector<int> miss1, miss2;
for (int i = 0; i < 3; i++) {
if (s1.count(a1[i])) miss1.push_back(a1[i]);
if (s2.count(a2[i])) miss2.push_back(a2[i]);
}
int mn = getLightest(miss1[0], miss2[0], miss1[1]);
for (int i = 0; i < 6; i++) if (!ans[i]) {
ans[i] = mn;
break;
}
s1.erase(mn);
s2.erase(mn);
}
if (s1.size() > s2.size()) {
swap(s1, s2);
swap(a1, a2);
}
if ((int)s1.size() == 1 && (int)s2.size() == 2) {
vector<int> a, b;
for (int i = 0; i < 3; i++) {
if (s1.count(a1[i])) a.push_back(a1[i]);
if (s2.count(a2[i])) b.push_back(a2[i]);
}
vector<int> ord(3);
int midMn = getMedian(a[0], b[0], b[1]);
if (midMn == a[0]) {
ord[0] = b[0];
ord[1] = a[0];
ord[2] = b[1];
}
if (midMn == b[0]) {
ord[0] = a[0];
ord[1] = b[0];
ord[2] = b[1];
}
if (midMn == b[1]) {
ord[0] = b[0];
ord[1] = b[1];
ord[2] = a[0];
}
s1.erase(a[0]);
s2.erase(b[0]);
s2.erase(b[1]);
reverse(ord.begin(), ord.end());
for (int i = 0; i < 6; i++) if (!ans[i]) {
ans[i] = ord.back();
ord.pop_back();
}
}
if ((int)s1.size() == 1 && (int)s2.size() == 1) {
int mn = getLightest(*s1.begin(), *s2.begin(), ans[5]);
vector<int> ord;
if (mn == *s1.begin()) ord = {*s1.begin(), *s2.begin()};
else ord = {*s2.begin(), *s1.begin()};
reverse(ord.begin(), ord.end());
for (int i = 0; i < 6; i++) if (!ans[i]) {
ans[i] = ord.back();
ord.pop_back();
}
}
if ((int)s1.size() == 0) {
vector<int> missing;
for (int i = 0; i < 3; i++)
if (s2.count(a2[i]))
missing.push_back(a2[i]);
reverse(missing.begin(), missing.end());
for (int i = 0; i < 6; i++) {
if (!ans[i]) {
ans[i] = missing.back();
missing.pop_back();
}
}
}
//for (int i = 0; i < 6; i++) cout << ans[i] << " "; cout << endl;
answer(ans);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |