Submission #399577

#TimeUsernameProblemLanguageResultExecution timeMemory
399577oolimryKoala Game (APIO17_koala)C++17
85 / 100
93 ms336 KiB
#include "koala.h" #include<bits/stdc++.h> #define all(x) (x).begin(), (x).end() #define sz(x) ((int) x.size()) using namespace std; int minValue(int N, int W) { int B[N]; int R[N]; fill(B,B+N,0); fill(R,R+N,0); B[0] = 1; playRound(B,R); for(int i = 0;i < N;i++){ if(R[i] == 0) return i; } } int maxValue(int N, int W) { int B1[N], B2[N], B3[N], B4[N]; int R1[N], R2[N], R3[N], R4[N]; for(int i = 0;i < N;i++){ B1[i] = 1; } playRound(B1,R1); for(int i = 0;i < N;i++){ B2[i] = R1[i]; } playRound(B2,R2); for(int i = 0;i < N;i++){ if(R2[i] == 3) B3[i] = 4; else B3[i] = 0; } playRound(B3,R3); for(int i = 0;i < N;i++){ if(R3[i] == 5) B4[i] = 11; else B4[i] = 0; } playRound(B4,R4); for(int i = 0;i < N;i++){ if(R4[i] == 12) return i; } return 0; } int comp(int N, int W, int a, int b) { int B[N]; int R[N]; fill(B,B+N,0); B[a] = 4; B[b] = 4; playRound(B,R); if(R[a] == 0 && R[b] > 0) return 1; ///something stands out else if(R[a] > 0 && R[b] == 0) return 0; ///something stands out else if(R[a] == 0 && R[b] == 0){ fill(B,B+N,0); B[a] = 1; B[b] = 1; playRound(B,R); if(R[a] == 0) return 1; if(R[b] == 0) return 0; fill(B,B+N,0); B[a] = 3; B[b] = 3; playRound(B,R); if(R[a] == 0) return 1; if(R[b] == 0) return 0; } fill(B,B+N,0); B[a] = 7; B[b] = 7; playRound(B,R); if(R[a] == 0 && R[b] > 0) return 1; ///something stands out else if(R[a] > 0 && R[b] == 0) return 0; ///something stands out else if(R[a] == 0 && R[b] == 0){ fill(B,B+N,0); B[a] = 5; B[b] = 5; playRound(B,R); if(R[a] == 0 && R[b] > 0) return 1; ///something stands out else if(R[a] > 0 && R[b] == 0) return 0; ///something stands out } else{ fill(B,B+N,0); B[a] = 10; B[b] = 10; playRound(B,R); if(R[a] == 0 && R[b] > 0) return 1; ///something stands out else if(R[a] > 0 && R[b] == 0) return 0; ///something stands out } return 1; } int greaterValue(int N, int W){ return comp(N,W,0,1); } void allValues1(int n, int W, int *P){ int B[n]; int R[n]; int A[n]; for(int i = 0;i < n;i++) A[i] = i; stable_sort(A, A+n, [&](int a, int b){ fill(B,B+n,0); B[a] = n, B[b] = n; playRound(B,R); if(R[a] == 0) return true; else return false; }); for(int i = 0;i < n;i++) P[A[i]] = i+1; } int B[100]; int R[100]; void play(){ playRound(B,R); } void allValues2(int n, int *P, int s, int e, vector<int> stuff){ if(sz(stuff) == 1){ P[stuff[0]] = s; return; } fill(B,B+n,0); for(int X = 1;sz(stuff)*X <= n;X++){ for(int i : stuff) B[i] = X; play(); vector<int> left, right; for(int i : stuff){ if(R[i] == 0) left.push_back(i); else right.push_back(i); } if(sz(left) == 0 or sz(right) == 0) continue; int m = s + sz(left); allValues2(n, P, s, m-1, left); allValues2(n, P, m, e, right); return; } assert(false); } void allValues(int N, int W, int *P) { if (W == 2*N) allValues1(N, W, P); else{ vector<int> stuff; for(int i = 0;i < N;i++) stuff.push_back(i); allValues2(N, P, 1, N, stuff); } }

Compilation message (stderr)

koala.cpp: In function 'int minValue(int, int)':
koala.cpp:16:1: warning: control reaches end of non-void function [-Wreturn-type]
   16 | }
      | ^
#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...