Submission #1226561

#TimeUsernameProblemLanguageResultExecution timeMemory
1226561ericl23302Prisoner Challenge (IOI22_prison)C++20
65 / 100
8 ms1144 KiB
#include "prison.h" #include <bits/stdc++.h> using namespace std; std::vector<std::vector<int>> devise_strategy(int N) { // vector<int> powers = {4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1}; // vector<vector<int>> res = {{0}}; // for (int i = 0; i < powers[0] && res[0].size() <= N; ++i) res[0].push_back(1); // for (int i = 0; i < powers[0] && res[0].size() <= N; ++i) res[0].push_back(2); // for (int i = 0; i < powers.size(); ++i) { // for (int j = 0; j < 2; ++j) { // vector<int> cur = {(i + 1) % 2}; // int curNext = i * 2 + 3; // int bagRet = -1; // if ((i + 1) % 2) bagRet = -2; // for (int k = 0; k < N; ++k) { // int val = k; // for (int p = 0; p < i; ++p) { // int power = powers[p]; // if (val >= power) val -= power; // } // int curDiv = powers[i]; // if (val < curDiv && j) cur.push_back(bagRet); // else if (val >= curDiv && !j) cur.push_back(-3 - bagRet); // else { // if (i < powers.size() - 1) { // if (val >= curDiv) val -= curDiv; // curDiv = powers[i + 1]; // if (val < curDiv) cur.push_back(curNext); // else cur.push_back(curNext + 1); // } else cur.push_back(0); // } // } // res.push_back(cur); // } // } vector<int> powers = {2187, 729, 243, 81, 27, 9, 3, 1}; vector<vector<int>> res = {{0}}; for (int i = 0; i < powers[0] && res[0].size() <= N; ++i) res[0].push_back(1); for (int i = 0; i < powers[0] && res[0].size() <= N; ++i) res[0].push_back(2); for (int i = 0; i < powers[0] && res[0].size() <= N; ++i) res[0].push_back(3); for (int i = 0; i < powers.size(); ++i) { for (int j = 0; j < 3; ++j) { vector<int> cur = {(i + 1) % 2}; int curNext = i * 3 + 4; int bagRet = -1; if ((i + 1) % 2) bagRet = -2; for (int k = 0; k < N; ++k) { int val = k; for (int p = 0; p < i; ++p) { int power = powers[p]; while (val >= power) val -= power; } int curDiv = powers[i]; int valDiv = val / curDiv; if (valDiv < j) cur.push_back(bagRet); else if (valDiv > j) cur.push_back(-3 - bagRet); else { if (i < powers.size() - 1) { while (val >= curDiv) val -= curDiv; curDiv = powers[i + 1]; valDiv = val / curDiv; cur.push_back(curNext + valDiv); } else cur.push_back(0); } } res.push_back(cur); } } // int cnt = 0; // for (auto &i : res) { // cout << cnt++ << ' '; // for (auto &j : i) cout << j << ' '; // cout << endl; // } return res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...