Submission #41709

#TimeUsernameProblemLanguageResultExecution timeMemory
41709funcsrScales (IOI15_scales)C++14
0 / 100
2 ms876 KiB
#include "scales.h" #include <vector> #include <algorithm> #include <string> #include <queue> #include <cassert> using namespace std; #define rep(i, n) for (int i=0; i<(n); i++) #define all(x) x.begin(), x.end() #define uniq(x) x.erase(unique(all(x)), x.end()) #define index(x, y) (int)(lower_bound(all(x), y) - x.begin()) #define pb push_back #define _1 first #define _2 second typedef pair<int, int> P; void init(int T) {} void solve3(vector<int> rest, vector<int> &ret) { assert(rest.size() == 3); int a = getHeaviest(rest[0], rest[1], rest[2]); int b = getMedian(rest[0], rest[1], rest[2]); ret.pb(a); ret.pb(b); for (int x : rest) if (x != a && x != b) ret.pb(x); } void solve4(vector<int> rest, vector<int> &ret) { assert(rest.size() == 4); // +2 int a = getHeaviest(rest[0], rest[1], rest[2]); int b = getHeaviest(rest[0], rest[1], rest[3]); int mx = -1; if (a == b) mx = a; else if (a == rest[0] || a == rest[1]) mx = b; else if (b == rest[0] || b == rest[1]) mx = a; else { // +1 assert(a == rest[2] && b == rest[3]); int tekitou = -1; for (int x : rest) if (x != a && x != b) tekitou = x; if (getHeaviest(a, b, tekitou) == a) { mx = a; } else { mx = b; } } ret.pb(a); vector<int> new_rest; for (int x : rest) if (x != a) new_rest.pb(x); solve3(new_rest, ret); } void orderCoins() { int max_123 = getHeaviest(1, 2, 3); int max_456 = getHeaviest(4, 5, 6); int tekitou = 1; while (tekitou==max_123 || tekitou==max_456) tekitou++; vector<int> ret; if (getHeaviest(max_123, max_456, tekitou) == max_123) { vector<int> x; for (int i=1; i<=3; i++) if (i != max_123) x.pb(i); ret.pb(max_123); int sec = getHeaviest(x[0], x[1], max_456); ret.pb(sec); vector<int> rest; for (int i=1; i<=6; i++) if (i != max_123 && i != sec) rest.pb(i); solve4(rest, ret); } else { vector<int> x; for (int i=4; i<=6; i++) if (i != max_456) x.pb(i); ret.pb(max_456); int sec = getHeaviest(x[0], x[1], max_123); ret.pb(sec); vector<int> rest; for (int i=1; i<=6; i++) if (i != max_456 && i != sec) rest.pb(i); solve4(rest, ret); } assert(ret.size() == 6); reverse(all(ret)); int W[] = {ret[0], ret[1], ret[2], ret[3], ret[4], ret[5]}; answer(W); }

Compilation message (stderr)

scales.cpp:17:15: warning: unused parameter 'T' [-Wunused-parameter]
 void init(int T) {}
               ^
scales.cpp: In function 'void solve4(std::vector<int>, std::vector<int>&)':
scales.cpp:32:7: warning: variable 'mx' set but not used [-Wunused-but-set-variable]
   int mx = -1;
       ^
#Verdict Execution timeMemoryGrader output
Fetching results...