# | 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... |