Submission #854494

#TimeUsernameProblemLanguageResultExecution timeMemory
854494FilipLPrisoner Challenge (IOI22_prison)C++17
80 / 100
10 ms1368 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> using namespace std; #define rep(a, b) for (int a = 0; a < (b); a++) #define array_log(arr, x) {rep(y, x) {cout << arr[y] << ' ';} cout << '\n';} #define unordered_map __gnu_pbds::gp_hash_table using ll = long long; const int MOD = 1e9 + 7; #define LOCAL true const int MAX_N = 5000 + 7; const int MAX_X = 23; int base3[MAX_N][9]; // idx od 1 int statetoboard[30]; int boardtostate[30]; void calc_base3() { rep(i, MAX_N) { if (i == 0) continue; int num = i; rep(di, 8) { base3[i][8 - di] = num % 3; num /= 3; } } } void calc_trans() { int board = 1; for (int state = 1; state < MAX_X; state++) { statetoboard[state] = board; boardtostate[board] = state; if (board == 7) board += 3; if (board == 18) board += 2; board++; } } vector<vector<int>> devise_strategy(int N) { ios_base::sync_with_stdio(0); cin.tie(0); vector<vector<int>> strat = vector<vector<int>>(MAX_X, vector<int>(N+1, 0)); calc_base3(); calc_trans(); // board == 00 for (int num = 1; num <= N; num++) { strat[0][num] = boardtostate[10*base3[num][1] + 1]; } for (int state = 1; state < MAX_X; state++) { int board = statetoboard[state]; int d = board / 10; int i = board % 10; strat[state][0] = i % 2; int same = (i % 2 == 0 ? -1 : -2); int other = (i % 2 == 0 ? -2 : -1); for (int num = 1; num <= N; num++) { int dthis = base3[num][i]; if (dthis < d) strat[state][num] = same; else if (dthis > d) strat[state][num] = other; else { strat[state][num] = boardtostate[10*base3[num][i+1] + i+1]; if (i == 7) { if (base3[num][8] == 0) strat[state][num] = same; else if (base3[num][8] == 2) strat[state][num] = other; } } } } return strat; } // int main() // { // ios_base::sync_with_stdio(0); // cin.tie(0); // if (LOCAL) { // freopen("io/in", "r", stdin); // freopen("io/out", "w", stdout); // } // int N = 5000; // auto strat = devise_strategy(N); // for (int state = 0; state < MAX_X; state++) { // array_log(strat[state], N+1); // } // return 0; // }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...