Submission #1131501

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

void orderCoins() {
    vector<vector<vector<int>>> memo(7, vector<vector<int>>(7, vector<int>(7, -1)));
    int W[6];
    int l1 = getLightest(1, 2, 3);
    int l2 = getLightest(4, 5, 6);
    memo[1][2][3] = l1;
    memo[4][5][6] = l2;
    int a = 1;
    if (l1 == 1) a = 2;
    W[0] = getLightest(l1, l2, a);
    
    set<int> aux;
    for (int i = 1; i <= 6; ++i) {
        if (i != W[0]) aux.insert(i);
    }

    for (int i = 1; i < 4; ++i) {
        vector<int> v;
        for (int j: aux) v.push_back(j);

        if (memo[v[0]][v[1]][v[2]] == -1) memo[v[0]][v[1]][v[2]] = getLightest(v[0], v[1], v[2]);
        W[i] = memo[v[0]][v[1]][v[2]];
        if ((int)aux.size() == 5) {
            if (memo[W[i]][v[3]][v[4]] == -1) memo[W[i]][v[3]][v[4]] = getLightest(W[i], v[3], v[4]);
            W[i] = memo[W[i]][v[3]][v[4]];
        }
        else if ((int)aux.size() == 4) {
            int a = v[0];
            if (v[0] == W[i]) a = v[1];
            if (memo[W[i]][v[3]][a] == -1) memo[W[i]][v[3]][a] = getLightest(W[i], v[3], a);
            W[i] = memo[W[i]][v[3]][a];
        }
        aux.erase(W[i]);
    }

    vector<int> v;
    for (int i: aux) v.push_back(i);
    W[4] = getMedian(W[0], v[0], v[1]);
    W[5] = v[0]+v[1]-W[4];

    answer(W);
}

void init(int T) {
    for (int i = 0; i < T; ++i) orderCoins();
}
#Verdict Execution timeMemoryGrader output
Fetching results...