Submission #1271395

#TimeUsernameProblemLanguageResultExecution timeMemory
1271395FaggiScales (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...