Submission #1207524

#TimeUsernameProblemLanguageResultExecution timeMemory
1207524kilikumaScales (IOI15_scales)C++20
0 / 100
0 ms320 KiB
#include "scales.h"
#include <bits/stdc++.h>

int T;
void init(int t) {
    T = t;
}

int findLightestOfFour(int a, int b, int c, int d) {
    int l1 = getLightest(a, b, c);
    if (l1 == a) return getLightest(a, d, d); // a vs d
    if (l1 == b) return getLightest(b, d, d); // b vs d
    return getLightest(c, d, d); // c vs d
}

void orderCoins() {
    int coins[6] = {1,2,3,4,5,6};
    int sorted[6];

    int group1 = findLightestOfFour(coins[0], coins[1], coins[2], coins[3]);
    int group2 = getLightest(coins[4], coins[5], coins[5]);

    int lightest = getLightest(group1, group2, group2);
    sorted[0] = lightest;

    int remaining[5], idx = 0;
    for (int i = 0; i < 6; ++i)
        if (coins[i] != lightest) remaining[idx++] = coins[i];

    sorted[1] = remaining[0];
    sorted[2] = remaining[1];

    int m = getMedian(sorted[0], sorted[1], remaining[2]);
    if (m == sorted[0]) {
        sorted[2] = sorted[1];
        sorted[1] = sorted[0];
        sorted[0] = remaining[2];
    } else if (m == sorted[1]) {
        sorted[2] = remaining[2];
    } else {
        sorted[2] = sorted[1];
        sorted[1] = remaining[2];
    }

    for (int i = 3; i < 5; ++i) {
        int x = remaining[i];
        if (getLightest(x, sorted[0], sorted[1]) == x) {
            for (int j = 5; j > 0; --j) sorted[j] = sorted[j - 1];
            sorted[0] = x;
        } else if (getLightest(x, sorted[4], sorted[3]) == x) {
            sorted[5] = x;
        } else {
            for (int j = 4; j > 0; --j) {
                if (getLightest(x, sorted[j], sorted[j - 1]) == x) {
                    for (int k = 5; k > j; --k)
                        sorted[k] = sorted[k - 1];
                    sorted[j] = x;
                    break;
                }
            }
        }
    }

    answer(sorted);
}
#Verdict Execution timeMemoryGrader output
Fetching results...