Submission #224411

#TimeUsernameProblemLanguageResultExecution timeMemory
224411BruteforcemanKoala Game (APIO17_koala)C++11
39 / 100
71 ms512 KiB
#include <bits/stdc++.h> #include "koala.h" using namespace std; int minValue(int N, int W) { // TODO: Implement Subtask 1 solution here. // You may leave this function unmodified if you are not attempting this // subtask. int A[N], B[N]; for(int i = 0; i < N; i++) { if(i) A[i] = 0; else A[i] = 1; } playRound(A, B); for(int i = 0; i < N; i++) { if(A[i] >= B[i]) return i; } return 0; } int maxValue(int N, int W) { // TODO: Implement Subtask 2 solution here. // You may leave this function unmodified if you are not attempting this // subtask. vector <int> can; for(int i = 0; i < N; i++) can.emplace_back(i); int A[N], B[N]; for(int i = 1; i <= 13; i++) { memset(A, 0, sizeof A); for(int j : can) { A[j] = i; } playRound(A, B); vector <int> aux; for(int j : can) { if(A[j] < B[j]) aux.emplace_back(j); } swap(can, aux); if(can.size() == 1) return can[0]; } return 0; } int cmp(int sz, int coin, int N, int W) { // TODO: Implement Subtask 3 solution here. // You may leave this function unmodified if you are not attempting this // subtask. if(N == W) return 0; int l = 1, r = min(13, coin / 2); int A[sz], B[sz]; while(l <= r) { int m = (l + r) >> 1; memset(A, 0, sizeof A); A[N] = A[W] = m; playRound(A, B); if(A[N] < B[N] && A[W] < B[W]) { l = m + 1; } else if (A[N] >= B[N] && A[W] >= B[W]) { r = m - 1; } else { return B[N] < B[W]; } } return 0; } int greaterValue(int N, int W) { return cmp(N, W, 0, 1); } void getAll(vector <int> &v, int N, int W) { int opt = W / v.size(); int A[N], B[N]; memset(A, 0, sizeof A); for(int i : v) { A[i] = opt; } playRound(A, B); vector <int> left, right; for(int i : v) { if(A[i] < B[i]) right.emplace_back(i); else left.emplace_back(i); } if(left.empty() || right.empty()) { sort_heap(v.begin(), v.end(), [&] (int i, int j) { return cmp(N, W, i, j); }); } else { getAll(left, N, W); getAll(right, N, W); v = left; for(int i : right) v.emplace_back(i); } } void allValues(int N, int W, int *P) { vector <int> v (N); for(int i = 0; i < N; i++) { v[i] = i; } getAll(v, N, W); for(int i = 0; i < N; i++) { P[v[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...