Submission #707242

#TimeUsernameProblemLanguageResultExecution timeMemory
707242600MihneaKoala Game (APIO17_koala)C++17
37 / 100
69 ms352 KiB
#include "koala.h" #include <cmath> #include <functional> #include <fstream> #include <iostream> #include <vector> #include <algorithm> #include <string> #include <set> #include <map> #include <list> #include <time.h> #include <math.h> #include <random> #include <deque> #include <queue> #include <unordered_map> #include <unordered_set> #include <iomanip> #include <cassert> #include <bitset> #include <sstream> #include <chrono> #include <cstring> #include <numeric> using namespace std; const int NMAX = 1000 + 7; int nglob; int b[NMAX]; int r[NMAX]; int wn[NMAX]; int isbig[NMAX]; void print(int a[]) { cout << " ---> "; for (int i = 0; i < nglob; i++) { cout << a[i] << " "; } cout << "\n"; } void ask() { playRound(b, r); for (int i = 0; i < nglob; i++) { wn[i] = (r[i] > b[i]); } } int minValue(int n, int w) { nglob = n; assert(n < NMAX); assert(w < NMAX); assert(n == w); assert(n % 2 == 0); for (int i = 0; i < n; i++) { b[i] = 0; } b[3] = 1; ask(); int cnt_lose = 0; for (int i = 0; i < n; i++) { cnt_lose += (wn[i] == 0); } assert(cnt_lose == 1); for (int i = 0; i < n; i++) { if (wn[i] == 0) { return i; } } assert(0); } int maxValue(int n, int w) { nglob = n; assert(n < NMAX); assert(w < NMAX); assert(n == w); assert(n % 2 == 0); for (int i = 0; i < n; i++) { isbig[i] = 1; } for (auto& val : { 1, 2, 4, 11 }) { for (int i = 0; i < n; i++) { b[i] = 0; if (isbig[i]) { b[i] = val; } } ask(); for (int i = 0; i < n; i++) { isbig[i] &= wn[i]; } } int cntbig = 0; for (int i = 0; i < n; i++) { cntbig += isbig[i]; } assert(cntbig == 1); for (int i = 0; i < n; i++) { if (isbig[i]) { return i; } } assert(0); } int greaterValue(int n, int w) { nglob = n; assert(n < NMAX); assert(w < NMAX); vector<int> v; for (int i = 1; i <= 50; i++) { v.push_back(i); } v = { 1, 2, 4, 8, 16, 32 }; int low = 0, high = (int)v.size() - 1; while (low <= high) { int mid = (low + high) / 2; int val = v[mid]; for (int i = 0; i < n; i++) { b[i] = 0; } b[0] = b[1] = val; ask(); if (wn[0] && wn[1]) { low = mid + 1; continue; } if (!wn[0] && !wn[1]) { high = mid - 1; continue; } if (wn[0] && !wn[1]) return 0; assert(wn[1] && !wn[0]); return 1; } assert(0); } void allValues(int n, int w, int* p) { nglob = n; assert(n < NMAX); assert(w < NMAX); if (w == 2 * n) { // TODO: Implement Subtask 4 solution here. // You may leave this block unmodified if you are not attempting this // subtask. } else { //cout << "salut!\n"; assert(w == n); // 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...