Submission #1050755

#TimeUsernameProblemLanguageResultExecution timeMemory
1050755phoenixPrisoner Challenge (IOI22_prison)C++17
80 / 100
6 ms1116 KiB
#include "prison.h" #include <bits/stdc++.h> using namespace std; int get_bit(int N, int i) { while (i--) N /= 3; return N % 3; } vector<vector<int>> devise_strategy(int N) { int X = 22; vector<vector<int>> S(X + 1, vector<int>(N + 1, 0)); S[0][0] = 0; for (int i = 1; i <= N; i++) S[0][i] = 1 + get_bit(i, 7); for (int i = 1; i <= X - 1; i++) { int k = (i - 1) / 3; int pos = 7 - k; int a = (i - 1) % 3; S[i][0] = (k % 2 == 0); for (int j = 1; j <= N; j++) { int b = (get_bit(j, pos)); if (a != b) { if (a < b) S[i][j] = (S[i][0] ? -1 : -2); else S[i][j] = (S[i][0] ? -2 : -1); } else { if (pos > 1) { S[i][j] = (k + 1) * 3 + 1 + get_bit(j, pos - 1); } else { if (get_bit(j, pos - 1) == 0) S[i][j] = (S[i][0] ? -2 : -1); if (get_bit(j, pos - 1) == 2) S[i][j] = (S[i][0] ? -1 : -2); if (get_bit(j, pos - 1) == 1) S[i][j] = 22; } } } } S[22][0] = 0; for (int i = 1; i <= N; i++) { int b = get_bit(i, 0); if (b == 0) S[22][i] = -1; if (b == 2) S[22][i] = -2; if (b == 1) S[22][i] = 0; } return S; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...