Submission #1271099

#TimeUsernameProblemLanguageResultExecution timeMemory
1271099Faggi저울 (IOI15_scales)C++20
45.45 / 100
1 ms328 KiB
#include <bits/stdc++.h>
#include "scales.h"
#define ll long long
#define sz(x) int(x.size())
#define forn(i, n) for (i = 0; i < n; i++)
#define all(x) x.begin(), x.end()
#define pb push_back
#define mp make_pair
#define fr first
#define se second
using namespace std;
/*
int getMedian(int A, int B, int C);
int getHeaviest(int A, int B, int C);
int getLightest(int A, int B, int C);
int getNextLightest(int A, int B, int C, int D);
void answer(int C[]);*/

void init(int T)
{
}

void ordQ(vector<ll> &q, ll x, bool rev=0)
{
    vector<ll> q2;
    q2.pb(x);
    q2.pb(getMedian(q[0], q[1], q[2]));
    for (ll k = 0; k < sz(q); k++)
        if (q[k] != q2[0] && q[k] != q2[1])
            q2.pb(q[k]);
    if(rev)
        reverse(all(q2));
    q=q2;
}


void ord(vector<ll> &v)
{
    vector<ll> ans;
    ans.pb(getLightest(v[0], v[1], v[2]));
    ans.pb(getMedian(v[0], v[1], v[2]));
    for (ll i = 0; i < sz(v); i++)
        if (v[i] != ans[0] && v[i] != ans[1])
            ans.pb(v[i]);
    v = ans;
}
void ret(vector<ll> &v, vector<ll> &q)
{
    ll i;
    int c[6];
    for (i = 0; i < 3; i++)
        c[i] = v[i];
    for (i = 0; i < 3; i++)
        c[i + 3] = q[i];
    answer(c);
}
void orderCoins()
{
    vector<ll> v, q;
    q = {1, 2, 3};
    ll i, x, sig = 4, j, y, z, k;
    for (i = 0; i < 3; i++)
    {
        x = getLightest(q[0], q[1], q[2]);
        v.pb(x);
        for (j = 0; j < sz(q); j++)
            if (q[j] == x)
                q[j] = sig++;
    }
    x = getLightest(q[0], q[1], q[2]);
    y = getHeaviest(v[0], v[1], v[2]);
    for (i = 0; i < sz(q); i++)
        if (x != q[i])
            z = q[i];
    k = getLightest(x, y, z);
    if (k != y)
    {
        j = 0;
        for (i = 0; i < sz(v); i++)
            if (v[i] == y)
                j = i;
        for (i = 0; i < sz(q); i++)
            if (q[i] == x)
            {
                swap(q[i], v[j]);
                break;
            }
        ord(v);
        ordQ(q,q[i]);
        ret(v, q);
        return;
    }
    ordQ(q,x);
    ordQ(v,y,1);
    ret(v, q);
    return;
}
#Verdict Execution timeMemoryGrader output
Fetching results...