Submission #1325374

#TimeUsernameProblemLanguageResultExecution timeMemory
1325374adiyerKoala Game (APIO17_koala)C++20
90 / 100
32 ms456 KiB
#include "koala.h" #include <bits/stdc++.h> using namespace std; int minValue(int n, int w) { int b[n], r[n]; memset(b, 0, sizeof(b)); b[0] = 1; playRound(b, r); for(int i = 0; i < n; i++) if(r[i] == 0) return i; memset(b, 0, sizeof(b)); b[1] = 1; playRound(b, r); for(int i = 0; i < n; i++) if(r[i] == 0) return i; return 0; } int maxValue(int n, int w) { int b[n], r[n]; memset(b, 0, sizeof(b)); for(int i = 0; i < n; i++) b[i] = 1; playRound(b, r); memset(b, 0, sizeof(b)); for(int i = 0; i < n; i++) if(r[i] > 1) b[i] = 2; playRound(b, r); memset(b, 0, sizeof(b)); for(int i = 0; i < n; i++) if(r[i] > 1) b[i] = 4; playRound(b, r); memset(b, 0, sizeof(b)); for(int i = 0; i < n; i++) if(r[i] > 1) b[i] = 11; playRound(b, r); for(int i = 0; i < n; i++) if(r[i] > 1) return i; return 0; } int greaterValue(int n, int w) { int b[n], r[n]; memset(b, 0, sizeof(b)); b[0] = b[1] = 5; playRound(b, r); if(r[0] > 5 && r[1] <= 5) return 0; if(r[0] <= 5 && r[1] > 5) return 1; if(r[0] <= 5 && r[1] <= 5){ memset(b, 0, sizeof(b)); b[0] = b[1] = 3; playRound(b, r); if(r[0] > 3 && r[1] <= 3) return 0; if(r[0] <= 3 && r[1] > 3) return 1; memset(b, 0, sizeof(b)); b[0] = b[1] = 1; playRound(b, r); if(r[0] > 1 && r[1] <= 1) return 0; if(r[0] <= 1 && r[1] > 1) return 1; } if(r[0] > 5 && r[1] > 5){ memset(b, 0, sizeof(b)); b[0] = b[1] = 8; playRound(b, r); if(r[0] > 8 && r[1] <= 8) return 0; if(r[0] <= 8 && r[1] > 8) return 1; } return 0; } void solve(vector < int > pos, int n, int w, int *p, int l = 1, int r = 100){ if(l == r){ p[pos[0]] = l; return; } vector < int > pos1, pos2; int B[n], R[n], x = min((int)sqrt(2 * l), w / (r - l + 1)); for(int i = 0; i < n; i++) B[i] = 0; for(int i = 0; i < n; i++) R[i] = 0; for(int i : pos) B[i] = x; playRound(B, R); for(int i : pos){ if(R[i] > x) pos2.push_back(i); else pos1.push_back(i); } if(pos1.empty() || pos2.empty()) return; solve(pos1, n, w, p, l, l + pos1.size() - 1); solve(pos2, n, w, p, r - pos2.size() + 1, r); } void allValues(int n, int w, int *p) { for(int i = 0; i < n; i++) p[i] = 0; vector < int > pos; for(int i = 0; i < n; i++) pos.push_back(i); solve(pos, n, w, p); }
#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...