제출 #1279715

#제출 시각아이디문제언어결과실행 시간메모리
1279715sheercold코알라 (APIO17_koala)C++20
37 / 100
45 ms456 KiB
#include "koala.h" #include <bits/stdc++.h> using namespace std; int minValue(int N, int W) { assert(N == W); int input[100]; int output[100]; fill(input, input + 100, 0); input[0] = 1; playRound(input, output); for (int i = 0; i < N; i++) { if (output[i] == 0) { return i; } } return 0; } int maxValue(int N, int W) { assert(N == W); int input[100]; int output[100]; vector<int> big(N); iota(big.begin(), big.end(), 0); while (big.size() > 1) { fill(input, input + 100, 0); int can_add = W / big.size(); can_add = min(can_add, 13); for (int ind : big) { input[ind] = can_add; } playRound(input, output); vector<int> nbig; for (int ind : big) { if (output[ind] > input[ind]) { nbig.push_back(ind); } } swap(big, nbig); } assert(big.size() == 1); return big[0]; } int greaterValue(int N, int W) { assert(N == W); assert(W >= 3); int input[100]; int output[100]; fill(input, input + 100, 0); auto check_result = [&]() -> int { array<int, 2> big; big[0] = input[0] < output[0]; big[1] = input[1] < output[1]; if (big[0] ^ big[1]) { return big[0] == 0; } else { return big[0] + 2; } }; input[0] = input[1] = 3; playRound(input, output); int res = check_result(); if (res < 2) { return res; } res -= 2; if (res == 0) { input[0] = input[1] = 2; playRound(input, output); res = check_result(); if (res < 2) { return res; } res -= 2; assert(res == 0); input[0] = input[1] = 1; playRound(input, output); res = check_result(); assert(res < 2); return res; } else { input[0] = input[1] = 5; playRound(input, output); res = check_result(); if (res < 2) { return res; } res -= 2; assert(res == 1); input[0] = input[1] = 8; playRound(input, output); res = check_result(); assert(res < 2); return res; } return 0; } void allValues(int N, int W, int *P) { int input[100]; int output[100]; if (W == 2*N) { vector<int> order(N); iota(order.begin(), order.end(), 0); sort(order.begin(), order.end(), [&](int lhs, int rhs) -> bool { fill(input, input + 100, 0); input[lhs] = input[rhs] = N; playRound(input, output); return input[rhs] < output[rhs]; }); for (int i = 0; i < N; i++) { P[order[i]] = i + 1; } } else { // 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...