Submission #1246439

#TimeUsernameProblemLanguageResultExecution timeMemory
1246439SpyrosAlivScales (IOI15_scales)C++20
45.45 / 100
1 ms328 KiB
#include "scales.h"
#include <bits/stdc++.h>
using namespace std;

void init(int T) {
    /* ... */
}

void orderCoins() {
    /* ... */
    vector<int> curr;
    for (int i = 1; i <= 6; i++) curr.push_back(i);
    vector<int> ord;
    while (curr.size() > 3) {
        int mx = 0;
        if (curr.size() == 6) {
            int a = getHeaviest(curr[0], curr[1], curr[2]);
            int b = getHeaviest(curr[3], curr[4], curr[5]);
            for (int i = 1; i <= 6; i++) {
                if (i == a || i == b) continue;
                mx = getHeaviest(a, b, i);
                break;
            }
        }
        else {
            int a = getHeaviest(curr[0], curr[1], curr[2]);
            vector<int> qr = {a};
            for (int i = curr.size()-1; i >= 0; i--) {
                if (curr[i] != a) qr.push_back(curr[i]);
                if (qr.size() == 3) break;
            }
            mx = getHeaviest(qr[0], qr[1], qr[2]);
        }
        ord.push_back(mx);
        vector<int> nxt;
        for (int i = 0; i < (int)curr.size(); i++) {
            if (curr[i] != mx) nxt.push_back(curr[i]);
        }
        curr = nxt;
    }
    int med = getMedian(curr[0], curr[1], curr[2]);
    int mx = getHeaviest(curr[0], curr[1], curr[2]);
    int mn = med ^ mx ^ curr[0] ^ curr[1] ^ curr[2];
    ord.push_back(mx);
    ord.push_back(med);
    ord.push_back(mn);
    reverse(ord.begin(), ord.end());
    int fin[6];
    for (int i = 0; i < 6; i++) fin[i] = ord[i];
    answer(fin);
}
#Verdict Execution timeMemoryGrader output
Fetching results...