Submission #1246566

#TimeUsernameProblemLanguageResultExecution timeMemory
1246566countlessScales (IOI15_scales)C++20
0 / 100
0 ms320 KiB
#include "scales.h"
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef long double ld;

#define sp <<" "<<
#define endl "\n"

void init(int T) {
    // sus there might be some bruteforce precomp
}

void orderCoins() {
    vector<int> L = {1, 2, 3}, R = {4, 5, 6};
    auto sort3 = [&](vector<int> &X) -> void {
        cerr << "query1" sp X[0] sp X[1] sp X[2] << endl;
        int A = getLightest(X[0], X[1], X[2]);
        int B = getMedian(X[0], X[1], X[2]);
        int C;
        for (int i = 0; i < 3; i++) {
            if (X[i] == A or X[i] == B) continue;
            C = X[i];
        }
        X = {A, B, C};
    };
    sort3(L), sort3(R);
    vector<int> A;
    int N, X;
    N = L[1];
    X = getMedian(L[0], N, R[0]);
    if (X == L[0]) {
        A.push_back(R[0]);
        A.push_back(L[0]);
        N = L[1];
    } else if (X == N) {
        A.push_back(L[0]);
        A.push_back(L[1]);
        N = R[0];
    } else {
        A.push_back(L[0]);
        A.push_back(R[0]);
        N = L[1];
    }

    if (N == R[0]) {
        X = getNextLightest(R[0], R[1], R[2], L[2]);
        if (X == R[0]) {
            X = getHeaviest(R[1], R[2], L[2]);

            if (X == L[2]) {
                A.push_back(R[0]);
                A.push_back(R[1]);
                A.push_back(R[2]);
                A.push_back(L[2]);
            } else {
                A.push_back(L[2]);
                A.push_back(R[0]);
                A.push_back(R[1]);
                A.push_back(R[2]);
            }
        } else {
            A.push_back(R[0]);
            A.push_back(R[1]);
            A.push_back(R[2]);
            auto it = find(A.begin(), A.end(), X);
            A.insert(it, L[2]);
        }
    } else if (N == L[1]) {
        X = getMedian(R[1], N, R[2]);
        if (X == R[1]) {
            A.push_back(N);
            A.push_back(R[1]);
            N = R[2];
        } else if (X == N) {
            A.push_back(R[1]);
            A.push_back(N);
            N = R[2];
        } else {
            A.push_back(R[1]);
            A.push_back(R[2]);
            N = L[1];
        }

        if (N == L[1]) {
            A.push_back(L[1]);
            A.push_back(L[2]);
        } else {
            X = getNextLightest(L[1], R[1], R[2], L[2]);
            if (X == L[1]) {
                A.push_back(N);
                A.push_back(L[2]);
            } else {
                A.push_back(N);
                auto it = find(A.begin(), A.end(), X);
                A.insert(it, L[2]);
            }
        }
    } else assert(0);

    int W[6];
    for (int i = 0; i < 6; i++) W[i] = A[i];
    answer(W);
}
#Verdict Execution timeMemoryGrader output
Fetching results...