Submission #631805

#TimeUsernameProblemLanguageResultExecution timeMemory
631805MahtimursuPrisoner Challenge (IOI22_prison)C++17
80 / 100
13 ms1116 KiB
#include "prison.h" #include <vector> #include <iostream> using namespace std; int get_bit(int val, int bit) { while (bit-- > 0) val /= 3; return val % 3; } int ans(bool low, bool t) { if (!low) t = !t; // B A return t ? -2 : -1; } int handle(int i, int j) { // 0 -> 0 // 1-3 -> 1 // 4-6 -> 2 int steps = (i + 2) / 3; bool t = steps % 2; if (j == 0) return t; int cmp = i == 0 ? -1 : (i - 1) % 3; int bit = i == 0 ? -1 : get_bit(j, 8 - steps); if (i == 22) cmp = 1; if (cmp == -1) { return 1 + get_bit(j, 8 - steps - 1); } else if (bit < cmp) { return ans(1, t); } else if (bit > cmp) { return ans(0, t); } else { if (steps == 7) { int nxt_bit = get_bit(j, 0); if (nxt_bit == 0) return ans(1, t); else if (nxt_bit == 2) return ans(0, t); else return 22; } return steps * 3 + 1 + get_bit(j, 8 - steps - 1); } } vector<vector<int>> devise_strategy(int N) { vector<vector<int>> res; int mx = 22; for (int i = 0; i <= mx; ++i) { vector<int> cur; for (int j = 0; j <= N; ++j) { cur.push_back(min(handle(i, j), mx)); } res.push_back(cur); } /*int row = 0; for (auto g : res) { cout << row++ << ": "; for (int x : g) cout << x << " "; cout << endl; }*/ return res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...