# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
567491 | 2022-05-23T15:18:43 Z | hoanghq2004 | Koala Game (APIO17_koala) | C++14 | 0 ms | 0 KB |
#include <bits/stdc++.h> #pragma GCC optimize ("O3") #pragma GCC optimize ("unroll-loops") #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> //#include "koala.h" using namespace __gnu_pbds; using namespace std; template <typename T> using ordered_set = tree <T, null_type, less <T>, rb_tree_tag, tree_order_statistics_node_update>; //static int N, W; //static int P[105]; // //static int maxQueries = 3200; //static int numQueries; // //static void runGame(int F); //static void grader(); // //void playRound(int *B, int *R) { // int i, j; // // int S = 0; // for (i=0;i<N;++i) { // if ( !(B[i] >= 0 && B[i] <= W) ) { // printf("Invalid query.\n"); // exit(0); // } // S += B[i]; // } // if (S > W) { // printf("Invalid query.\n"); // exit(0); // } // // numQueries++; // if (numQueries > maxQueries) { // printf("Too many queries.\n"); // exit(0); // } // // int cache[2][205]; // int num[2][205]; // char taken[105][205]; // // for (i=0;i<205;++i) { // cache[1][i] = 0; // num[1][i] = 0; // } // // for (i=0;i<N;++i) { // int v = B[i]+1; // int ii = i&1; // int o = ii^1; // for (j=0;j<=W;++j) { // cache[ii][j] = cache[o][j]; // num[ii][j] = num[o][j]; // taken[i][j] = 0; // } // for (j=W;j>=v;--j) { // int h = cache[o][j-v] + P[i]; // int hn = num[o][j-v] + 1; // if (h > cache[ii][j] || (h == cache[ii][j] && hn > num[ii][j])) { // cache[ii][j] = h; // num[ii][j] = hn; // taken[i][j] = 1; // } else { // taken[i][j] = 0; // } // } // } // // int cur = W; // for (i=N-1;i>=0;--i) { // R[i] = taken[i][cur] ? (B[i] + 1) : 0; // cur -= R[i]; // } //} int minValue(int N, int W) { int B[105]; int R[105]; memset(B, 0, sizeof(B)); memset(R, 0, sizeof(R)); B[0] = 1; playRound(B, R); for (int i = 0; i < N; ++i) if (R[i] == 0) return i; assert(0); // TODO: Implement Subtask 1 solution here. // You may leave this function unmodified if you are not attempting this // subtask. 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. return 0; } int greaterValue(int N, int W) { // TODO: Implement Subtask 3 solution here. // You may leave this function unmodified if you are not attempting this // subtask. return 0; } void allValues(int N, int W, int *P) { if (W == 2*N) { // TODO: Implement Subtask 4 solution here. // You may leave this block unmodified if you are not attempting this // subtask. } else { // TODO: Implement Subtask 5 solution here. // You may leave this block unmodified if you are not attempting this // subtask. } } // //int main() { // grader(); // return 0; //} // // //static void runGame(int F) { // int i; // // scanf("%d %d",&N,&W); // for (i=0;i<N;++i) { // scanf("%d",&P[i]); // } // // numQueries = 0; // if (F == 1) { // assert(P[minValue(N, W)] == 1); //// printf("%d\n", minValue(N, W)); // } else if (F == 2) { // printf("%d\n", maxValue(N, W)); // } else if (F == 3) { // printf("%d\n", greaterValue(N, W)); // } else if (F == 4) { // int userP[105]; // allValues(N, W, userP); // for (i=0;i<N;i++) { // printf("%d ",userP[i]); // } // printf("\n"); // } // printf("Made %d calls to playRound.\n", numQueries); //} // //static void grader() { // int i; // // int F, G; // scanf("%d %d",&F,&G); // // for (i=0;i<G;i++) { // runGame(F); // } //}