제출 #1246439

#제출 시각아이디문제언어결과실행 시간메모리
1246439SpyrosAliv저울 (IOI15_scales)C++20
45.45 / 100
1 ms328 KiB
#include "scales.h" #include <bits/stdc++.h> using namespace std; void init(int T) { /* ... */ } void orderCoins() { /* ... */ vector<int> curr; for (int i = 1; i <= 6; i++) curr.push_back(i); vector<int> ord; while (curr.size() > 3) { int mx = 0; if (curr.size() == 6) { int a = getHeaviest(curr[0], curr[1], curr[2]); int b = getHeaviest(curr[3], curr[4], curr[5]); for (int i = 1; i <= 6; i++) { if (i == a || i == b) continue; mx = getHeaviest(a, b, i); break; } } else { int a = getHeaviest(curr[0], curr[1], curr[2]); vector<int> qr = {a}; for (int i = curr.size()-1; i >= 0; i--) { if (curr[i] != a) qr.push_back(curr[i]); if (qr.size() == 3) break; } mx = getHeaviest(qr[0], qr[1], qr[2]); } ord.push_back(mx); vector<int> nxt; for (int i = 0; i < (int)curr.size(); i++) { if (curr[i] != mx) nxt.push_back(curr[i]); } curr = nxt; } int med = getMedian(curr[0], curr[1], curr[2]); int mx = getHeaviest(curr[0], curr[1], curr[2]); int mn = med ^ mx ^ curr[0] ^ curr[1] ^ curr[2]; ord.push_back(mx); ord.push_back(med); ord.push_back(mn); reverse(ord.begin(), ord.end()); int fin[6]; for (int i = 0; i < 6; i++) fin[i] = ord[i]; answer(fin); }
#Verdict Execution timeMemoryGrader output
Fetching results...