Submission #1271395

#TimeUsernameProblemLanguageResultExecution timeMemory
1271395Faggi저울 (IOI15_scales)C++20
71.43 / 100
104 ms536 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)
{
}

bool cond(ll p[], ll d, ll k)
{
    if (d == 0&&p[k] < p[(k + 1) % 3] && p[k] < p[(k + 2) % 3])
        return 1;
    if (d == 1&&((p[k] > p[(k + 1) % 3] && p[k] < p[(k + 2) % 3]) || (p[k] < p[(k + 1) % 3] && p[k] > p[(k + 2) % 3])))
        return 1;
    if (d == 2&&p[k] > p[(k + 1) % 3] && p[k] > p[(k + 2) % 3])
        return 1;
    return 0;
}

vector<vector<ll>> all, all2;
ll calcLMH(ll a, ll b, ll c, ll d)
{
    ll i, p[3], j, A[3]={0,0,0}, k, ma, l;
    for (l = 0; l < 3; l++)
    {
        for (k = 0; k < 3; k++)
        {
            for (i = 0; i < sz(all); i++)
            {
                for (j = 0; j < sz(all[i]); j++)
                {
                    if (a == all[i][j])
                        p[0] = j;
                    if (b == all[i][j])
                        p[1] = j;
                    if (c == all[i][j])
                        p[2] = j;
                }
                if(cond(p,d,k))
                    A[k]++;
            }
        }
    }
    ma = max(A[0], max(A[1], A[2]));
    if (ma == 0)
        return LLONG_MAX;
    return ma;
}
void orderCoins()
{
    all.resize(0);
    vector<ll> v = {1, 2, 3, 4, 5, 6};
    do
    {
        all.pb(v);
    } while (next_permutation(all(v)));
    while (sz(all) > 1)
    {
        ll mi = LLONG_MAX, t = 0, i, j, k, c, l, tam=sz(all);
        vector<ll> v = {1, 2, 3};
        for (l = 0; l < 3; l++)
        {
            for (i = 1; i <= 6; i++)
            {
                for (j = i + 1; j <= 6; j++)
                {
                    for (k = j + 1; k <= 6; k++)
                    {
                        c = calcLMH(i, j, k, l);
                        if (c < mi)
                        {
                            mi = c;
                            t = l;
                            v = {i, j, k};
                        }
                    }
                }
            }
        }

        // Consulta
        switch (t)
        {
        case 0:
            c = getLightest(v[0], v[1], v[2]);
            break;
        case 1:
            c = getMedian(v[0], v[1], v[2]);
            break;
        default:
            c = getHeaviest(v[0], v[1], v[2]);
            break;
        }
        ll p[3], pos;
        for (k = 0; k < 3; k++)
            if (v[k] == c)
                pos = k;
        for (i = 0; i < sz(all); i++)
        {
            for (j = 0; j < sz(all[i]); j++)
            {
                for (k = 0; k < 3; k++)
                {
                    if (v[k] == all[i][j])
                        p[k] = j;
                }
            }
            if (cond(p,t,pos))
                all2.pb(all[i]);
        }
        swap(all, all2);
        all2.resize(0);
    }
    int C[6];
    for (ll i = 0; i < 6; i++)
        C[i] = all[0][i];
    answer(C);
}
#Verdict Execution timeMemoryGrader output
Fetching results...