제출 #1246491

#제출 시각아이디문제언어결과실행 시간메모리
1246491SpyrosAliv저울 (IOI15_scales)C++20
0 / 100
0 ms320 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> a, b;
    int tot = 0;
    int med = getMedian(curr[0], curr[1], curr[2]);
    int mx = getHeaviest(curr[0], curr[1], curr[2]);
    tot += 2;
    int mn = med ^ mx ^ curr[0] ^ curr[1] ^ curr[2];
    a.push_back(mn);
    a.push_back(med);
    a.push_back(mx);
    med = getMedian(curr[3], curr[4], curr[5]);
    mx = getHeaviest(curr[3], curr[4], curr[5]);
    tot += 2;
    mn = med ^ mx ^ curr[3] ^ curr[4] ^ curr[5];
    b.push_back(mn);
    b.push_back(med);
    b.push_back(mx);
    vector<int> ord;
    int pa = 0, pb = 0;
    while (pa < 3 && pb < 3) {
        vector<int> qr;
        qr.push_back(a[pa]);
        qr.push_back(b[pb]);
        mn = 1;
        if (pa < 2) qr.push_back(a[pa+1]);
        else if (pb < 2) qr.push_back(b[pb+1]);
        else {
            mn = 0;
            qr.push_back(a[pa-1]);
        }
        if (mn) {
            int nxt = getLightest(qr[0], qr[1], qr[2]);
            tot++;
            ord.push_back(nxt);
            if (a[pa] == nxt) pa++;
            else pb++;
        }
        else {
            int nxt = a[pa] ^ b[pb] ^ getHeaviest(qr[0], qr[1], qr[2]);
            ord.push_back(nxt);
            if (a[pa] == nxt) pa++;
            else pb++;
        }
    }
    while (pa < 3) {
        ord.push_back(a[pa++]);
    }
    while (pb < 3) {
        ord.push_back(b[pb++]);
    }
    int fin[6];
    for (int i = 0; i < 6; i++) fin[i] = ord[i];
    cout << tot << "\n";
    answer(fin);
}
#Verdict Execution timeMemoryGrader output
Fetching results...