Submission #628373

#TimeUsernameProblemLanguageResultExecution timeMemory
628373dqhungdlPrisoner Challenge (IOI22_prison)C++17
65 / 100
19 ms1140 KiB
#include "prison.h" #include <bits/stdc++.h> using namespace std; typedef pair<int, int> ii; const int MAX_BIT = 12; int cnt = 0, id[13][2]; ii rev[25]; int getBit(int x, int k) { return (x >> k) & 1; } vector<vector<int>> devise_strategy(int N) { vector<int> V; for (int i = 1; i <= MAX_BIT; i++) for (int j = 0; j <= 1; j++) { id[i][j] = ++cnt; rev[cnt] = {i, j}; } vector<vector<int>> rs(cnt + 1, vector<int>(N + 1)); for (int i = 1; i <= N; i++) rs[0][i] = id[MAX_BIT][getBit(i, MAX_BIT)]; for (int i = 1; i <= cnt; i++) { int bit = rev[i].first, val = rev[i].second; rs[i][0] = 1 - (MAX_BIT - bit) % 2; for (int j = 1; j <= N; j++) { if (getBit(j, bit) < val) rs[i][j] = (rs[i][0] ? -2 : -1); else if (getBit(j, bit) > val) rs[i][j] = (rs[i][0] ? -1 : -2); else { if (bit == 1) { if (!getBit(j, 0)) rs[i][j] = (rs[i][0] ? -2 : -1); else rs[i][j] = (rs[i][0] ? -1 : -2); } else rs[i][j] = id[bit - 1][getBit(j, bit - 1)]; } } } return rs; } /********************************************************************/ //static constexpr int kNumPrisoners = 500; // //static void invalid_strategy(string message) { // printf("%s\n", message.c_str()); // exit(0); //} // //int main() { // freopen("../_input", "r", stdin); // int N; // assert(1 == scanf("%d", &N)); // // vector<vector<int>> strategy = devise_strategy(N); // if (strategy.size() == 0) { // invalid_strategy("s is an empty array"); // } // int x = strategy.size() - 1; // for (int i = 0; i <= x; ++i) { // if (static_cast<int>(strategy[i].size()) != N + 1) { // invalid_strategy("s[i] contains incorrect length"); // } // if (strategy[i][0] < 0 || strategy[i][0] > 1) { // invalid_strategy("First element of s[i] is non-binary"); // } // for (int j = 1; j <= N; ++j) { // if (strategy[i][j] < -2 || strategy[i][j] > x) { // invalid_strategy("s[i][j] contains incorrect value"); // } // } // } // // FILE *log_file = fopen("log.txt", "w"); // // int A, B; // while (1 == scanf("%d", &A) && A != -1) { // assert(1 == scanf("%d", &B)); // bool answer = false; // int whiteboard = 0; // for (int i = 0; i < kNumPrisoners && !answer; ++i) { // int check = strategy[whiteboard][0]; // whiteboard = strategy[whiteboard][check == 0 ? A : B]; // if (whiteboard < 0) { // answer = true; // printf("%c\n", "BA"[whiteboard + 2]); // } else { // if (i > 0) { // fprintf(log_file, " "); // } // fprintf(log_file, "%d\n", whiteboard); // fprintf(log_file, " (%d, %d)\n", rev[whiteboard].first, rev[whiteboard].second); // } // } // if (!answer) { // printf("X\n"); // } // fprintf(log_file, "\n"); // fflush(log_file); // } //}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...