Submission #829864

#TimeUsernameProblemLanguageResultExecution timeMemory
829864GusterGoose27Koala Game (APIO17_koala)C++17
37 / 100
74 ms340 KiB
#include "koala.h" #include <bits/stdc++.h> using namespace std; const int MAXN = 105; bool pres[MAXN]; int n, w; vector<int> query(vector<int> &inp) { int *a = new int[n]; int *b = new int[n]; for (int i = 0; i < n; i++) a[i] = inp[i]; playRound(a, b); vector<int> out; for (int i = 0; i < n; i++) { if (b[i] > inp[i]) out.push_back(i); } delete[] a; delete[] b; return out; } vector<int> complement(vector<int> inp) { fill(pres, pres+n, 0); for (int v: inp) pres[v] = 1; vector<int> out; for (int i = 0; i < n; i++) if (!pres[i]) out.push_back(i); return out; } vector<int> inter(vector<int> a, vector<int> &b) { fill(pres, pres+n, 0); for (int v: a) pres[v] = 1; vector<int> out; for (int v: b) if (pres[v]) out.push_back(v); return out; } int minValue(int N, int W) { n = N; w = W; vector<int> vals(n, 0); vals[0] = 1; return complement(query(vals))[0]; } int maxValue(int N, int W) { n = N; w = W; vector<int> cur(n, 0); iota(cur.begin(), cur.end(), 0); while (cur.size() > 1) { int put = n/cur.size(); vector<int> qry(n, 0); for (int v: cur) qry[v] = put; cur = inter(query(qry), cur); } return cur[0]; } int greaterValue(int N, int W) { n = N; w = W; vector<int> put({1, 2, 5, 10}); int mn = -1, mx = 4; vector<int> two({0, 1}); while (mx > mn+1) { int cur = (mn+mx)/2; vector<int> qry(n, 0); qry[0] = qry[1] = put[cur]; vector<int> vals = inter(query(qry), two); if (vals.size() == 2) mn = cur; else if (vals.empty()) mx = cur; else { return vals[0]; } } assert(false); return 0; } struct comp { bool operator()(int &a, int &b) { vector<int> qry(n, 0); qry[a] = qry[b] = n; vector<int> two({a, b}); return inter(query(qry), two)[0] == b; } } comp; void allValues(int N, int W, int *P) { n = N; w = W; if (W == 2*N) { vector<int> ans(n); iota(ans.begin(), ans.end(), 0); sort(ans.begin(), ans.end(), comp); for (int i = 0; i < n; i++) P[ans[i]] = i+1; } else { // TODO: Implement Subtask 5 solution here. // You may leave this block unmodified if you are not attempting this // subtask. } }
#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...