Submission #628504

#TimeUsernameProblemLanguageResultExecution timeMemory
628504kingmoshe죄수들의 도전 (IOI22_prison)C++17
0 / 100
0 ms212 KiB
#include "prison.h" #include <vector> #include <iostream> int get_bit_value(int num, int bit_id) { if (bit_id < 0) { return 0; } if (bit_id == 0) { return num % 2; } return get_bit_value(num / 2, bit_id - 1); } int get_maximal_bit_id(int num) { if (num < 2) { return 1; } return 1 + get_maximal_bit_id(num / 2); } std::vector<std::vector<int>> devise_strategy(int N) { int x = (get_maximal_bit_id(N) + 1) * 3; std::vector<std::vector<int>> s(x + 1, std::vector<int>(N + 1)); for (int i = 0; i <= x; i++) { for (int j = 0; j <= N; j++) { s[i][j] = 0; } } for (int i = 0; i <= x; i++) { if (i % 3 == 0) { s[i][0] = 0; } else { s[i][0] = 1; } } int bit_id = get_maximal_bit_id(N); for (int i = 0; i <= x; i++) { bool looking_at_a = false; if (i % 3 == 0) { looking_at_a = true; if (i != 0) { bit_id -= 1; } } for (int j = 1; j <= N; j++) { int cur_bit_value = get_bit_value(j, bit_id); if (looking_at_a) { s[i][j] = i + 1 + cur_bit_value; } else { int last_bit_value = (i % 3) - 1; if (last_bit_value != cur_bit_value) { if (last_bit_value > cur_bit_value) { s[i][j] = -2; } else { s[i][j] = -1; } } else { s[i][j] = i + 1; if (i % 3 == 1) { s[i][j] += 1; } } } } } return s; } bool solution(std::vector<std::vector<int>> s, int a, int b) { int value_on_board = 0; while (true) { int num = -1; if (s[value_on_board][0] == 0) { num = a; } else if (s[value_on_board][0] == 1) { num = b; } else { std::cout << "major problem!!"; } if (s[value_on_board][num] == -1) { std::cout << "a is lower" << std::endl; return false; } else if (s[value_on_board][num] == -2) { std::cout << "b is lower" << std::endl; return true; } else { value_on_board = s[value_on_board][num]; } } } /*int main() { std::vector<std::vector<int>> s = devise_strategy(500); std::cout << solution(s, 3, 2) << std::endl; std::cout << "cool" << std::endl; }//*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...