Submission #1294131

#TimeUsernameProblemLanguageResultExecution timeMemory
1294131goulthenScales (IOI15_scales)C++20
55.56 / 100
1 ms356 KiB
#include "scales.h"
#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define rep(i,a,b) for(int i = a; i <= b; ++i)

void init(int T) {
    //MEH
}

void orderCoins() {
    int W[6];
    set<int> l,r;
    rep(i,1,3) l.insert(i);
    rep(i,4,6) r.insert(i);

    int mn = getLightest(1,2,3), mn2 = getLightest(4,5,6);
    l.erase(mn);
    r.erase(mn2);

    vector<int> v;
    

    int tmp = getMedian(mn,mn2,*l.begin());
    if(tmp == mn) v.insert(v.end(), {mn2,mn,*l.begin()});
    else if(tmp == mn2) v.insert(v.end(), {mn,mn2, *l.begin()});
    else v.insert(v.end(), {mn,*l.begin(), mn2});

    l.erase(l.begin());
    vector<int> ind(7);
    //{ind,}
    rep(i,0,2) ind[v[i]] = i;

    set<int> rst = {*l.begin(), *r.begin(), *r.rbegin()};
    vector<int> gp;
    vector<int> st;
    int x = *l.begin() + *r.begin() + *r.rbegin();
    gp.pb(getLightest(*l.begin(), *r.begin(), *r.rbegin()));
    gp.pb(getMedian(*l.begin(), *r.begin(), *r.rbegin()));
    gp.pb(x-gp[0]-gp[1]);

    for(int &x : gp) {
        st.pb((ind[getNextLightest(v[0],v[1],v[2], x)]+2)%3);
    }

    int L = 0, R = 0;
    while (L+R < 6) {
        if (L==3 || (R<3 && st[R] < L)) {
            W[L+R] = gp[R];
            R++;
        }
        else {
            W[L+R] = v[L];
            L++;
        }
    }

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