Submission #368098

#TimeUsernameProblemLanguageResultExecution timeMemory
368098KoDScales (IOI15_scales)C++17
71.73 / 100
1 ms396 KiB
#include "scales.h" #include <bits/stdc++.h> void init(int) { } std::tuple<int, int, int> get_min(int a, int b, int c) { const auto t = getLightest(a, b, c); if (t == b) std::swap(a, b); if (t == c) std::swap(a, c); return std::make_tuple(a, b, c); } std::array<int, 4> sort4(std::array<int, 4> arr) { auto [a, b, c] = get_min(arr[0], arr[1], arr[2]); const auto d = arr[3]; // a < b, a < c const auto h = getHeaviest(b, c, d); if (h == c) { std::swap(b, c); } if (h == b) { // a < c < b, d < b const auto m = getMedian(a, c, d); if (m == a) { return { d, a, c, b }; } else if (m == c) { return { a, c, d, b }; } else { return { a, d, c, b }; } } else { // a < c < d, a < b < d if (getLightest(b, c, d) == b) { return { a, b, c, d }; } else { return { a, c, b, d }; } } } void orderCoins() { auto [a, b, c] = get_min(1, 2, 3); auto [d, e, f] = get_min(4, 5, 6); const auto arr = sort4(std::array<int, 4>{ b, c, e, f }); // currently 5 queries if (arr[0] > 3) { std::swap(a, d); } std::array<int, 6> ret; if ((arr[1] > 3) == (d > 3)) { const auto m = getMedian(a, d, arr[0]); if (m == a) { ret = { d, a, arr[0], arr[1], arr[2], arr[3] }; } else if (m == d) { ret = { a, d, arr[0], arr[1], arr[2], arr[3] }; } else { ret = { a, arr[0], d, arr[1], arr[2], arr[3] }; } } else { const auto m = getMedian(a, d, arr[0]); if (m == a) { ret = { d, a, arr[0], arr[1], arr[2], arr[3] }; } else if (m == d) { ret = { a, d, arr[0], arr[1], arr[2], arr[3] }; } else { if (getLightest(d, arr[1], arr[2]) == d) { ret = { a, arr[0], d, arr[1], arr[2], arr[3] }; } else { ret = { a, arr[0], arr[1], d, arr[2], arr[3] }; } } } int tmp[6] = {}; for (int i = 0; i < 6; ++i) { tmp[i] = ret[i]; } answer(tmp); }
#Verdict Execution timeMemoryGrader output
Fetching results...