제출 #1271350

#제출 시각아이디문제언어결과실행 시간메모리
1271350Faggi저울 (IOI15_scales)C++20
45.45 / 100
0 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...