Submission #111494

#TimeUsernameProblemLanguageResultExecution timeMemory
111494diamond_duke코알라 (APIO17_koala)C++11
73 / 100
82 ms512 KiB
#include "koala.h" #include <algorithm> #include <vector> std::vector<bool> query(const std::vector<int> &vec) { static int B[105], R[105]; int n = vec.size(); for (int i = 0; i < n; i++) B[i] = vec[i]; playRound(B, R); std::vector<bool> res(n); for (int i = 0; i < n; i++) res[i] = R[i] > B[i]; return res; } int minValue(int n, int m) { std::vector<int> vec(n); vec[0] = 1; auto res = query(vec); for (int i = 0; i < n; i++) { if (!res[i]) return i; } return -1; } int maxValue(int n, int m) { std::vector<bool> in(n, true); int cnt = n; while (cnt > 1) { int w = m / cnt; std::vector<int> vec(n); for (int i = 0; i < n; i++) vec[i] = in[i] ? w : 0; auto res = query(vec); cnt = 0; for (int i = 0; i < n; i++) { in[i] = in[i] & res[i]; cnt += in[i]; } } for (int i = 0; i < n; i++) { if (in[i]) return i; } return -1; } bool comp(int n, int x, int y) { std::vector<int> vec(n); vec[x] = vec[y] = 4; auto res = query(vec); if (res[x] != res[y]) return res[y]; if (res[x]) { vec[x] = vec[y] = 8; return query(vec)[y]; } vec[x] = vec[y] = 2; res = query(vec); if (res[x] != res[y]) return res[y]; vec[x] = vec[y] = 1; return query(vec)[y]; } int greaterValue(int n, int m) { return comp(n, 0, 1); } void allValues(int n, int m, int *arr) { std::vector<int> seq(n); for (int i = 0; i < n; i++) seq[i] = i; std::stable_sort(seq.begin(), seq.end(), [&] (int x, int y) { if (n == m) return comp(n, x, y); std::vector<int> vec(n, 0); vec[x] = vec[y] = n; return (bool)query(vec)[y]; }); for (int i = 0; i < n; i++) arr[seq[i]] = i + 1; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...