Submission #639830

#TimeUsernameProblemLanguageResultExecution timeMemory
639830piOOEScales (IOI15_scales)C++17
39.05 / 100
1 ms332 KiB
#include <bits/stdc++.h>
#include "scales.h"

using namespace std;

void init(int T) {

}

constexpr int n = 6;

void ord(int a[]) {
    int x = getHeaviest(a[0], a[1], a[2]);
    int y = getMedian(a[0], a[1], a[2]);
    int z = a[0] + a[1] + a[2] - x - y;
    a[0] = x, a[1] = y, a[2] = z;
}

int p[n], a[3], b[3], ans[3];

mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());

void orderCoins() {
    int tmp[6];
    iota(tmp, tmp + 6, 1);
    shuffle(tmp, tmp + 6, rnd);
    for (int i = 0; i < 3; ++i) {
        a[i] = tmp[i];
        b[i] = tmp[i + 3];
    }
    ord(a), ord(b);
    for (int i = 0; i < 3; ++i) {
        ans[i] = getNextLightest(a[0], a[1], a[2], b[i]);
    }
    if (ans[0] == ans[1] && ans[1] == ans[2] && ans[0] == a[2]) {
        //either all bigger or all smaller
        bool smaller = getLightest(a[0], a[1], b[0]) == b[0];
        if (smaller) {
            for (int i = 0; i < 3; ++i) {
                p[i] = a[i];
                p[i + 3] = b[i];
            }
        } else {
            p[0] = b[0];
            smaller = getLightest(a[0], a[1], b[1]) == b[1];
            if (smaller) {
                p[1] = a[0], p[2] = a[1], p[3] = a[2];
                p[4] = b[1], p[5] = b[2];
            } else {
                p[1] = b[1];
                smaller = getLightest(a[0], a[1], b[2]) == b[2];
                if (smaller) {
                    p[2] = a[0], p[3] = a[1], p[4] = a[2];
                    p[5] = b[2];
                } else {
                    p[2] = b[2];
                    p[3] = a[0], p[4] = a[1], p[5] = a[2];
                }
            }
        }
        reverse(p, p + n);
        answer(p);
    } else {
        int pntB = 0, pnt = 0;
        for (int i = 0; i < 3; ++i) {
            if (ans[i] == a[2]) {
                p[pnt++] = b[i];
                ++pntB;
            } else {
                break;
            }
        }
        for (int i = 0; i < 3; ++i) {
            p[pnt++] = a[i];
            while (pntB < 3 && ans[pntB] == a[i]){
                p[pnt++] = b[pntB++];
            }
        }
        reverse(p, p + n);
        answer(p);
    }
}

Compilation message (stderr)

scales.cpp: In function 'void init(int)':
scales.cpp:6:15: warning: unused parameter 'T' [-Wunused-parameter]
    6 | void init(int T) {
      |           ~~~~^
#Verdict Execution timeMemoryGrader output
Fetching results...