제출 #832309

#제출 시각아이디문제언어결과실행 시간메모리
832309ymmPrisoner Challenge (IOI22_prison)C++17
100 / 100
14 ms1000 KiB
#include "prison.h" #include <bits/stdc++.h> #define Loop(x,l,r) for (ll x = (l); x < (r); ++x) #define LoopR(x,l,r) for (ll x = (r)-1; x >= l; --x) typedef long long ll; using namespace std; vector<int> ord = {3, 3, 3, 3, 3, 22}; vector<int> val; void make_val(int x) { val.clear(); LoopR (i,0,ord.size()) { val.push_back(x%ord[i]); x /= ord[i]; } reverse(val.begin(), val.end()); } int get_nxt(bool ask, int k, int x) { make_val(x); int nxt = 0; int tmp = k; while (tmp > 0) tmp -= ord[nxt++]; int k2 = 1; Loop (i,0,nxt) k2 += ord[i]; if (k == 0) return k2 + val[nxt]; // TODO: generalize if (k <= 15) { if ((k-1)%3 < val[nxt-1]) return ask? -1: -2; if ((k-1)%3 > val[nxt-1]) return ask? -2: -1; if (k2 == 16) { if (val.back() == 0) return ask? -2: -1; if (val.back() == 21) return ask? -1: -2; if (val.back() <= 10) return 16; else return 17; } return k2 + val[nxt]; } if (k == 16) { if (val.back() <= 1) return ask? -2: -1; if (val.back() >= 10) return ask? -1: -2; if (val.back() <= 5) return 18; else return 19; } if (k == 17) { if (val.back() <= 11) return ask? -2: -1; if (val.back() >= 20) return ask? -1: -2; if (val.back() <= 15) return 18; else return 19; } if (k == 18) { int x = val.back(); if (x > 10) x -= 10; if (x <= 2) return ask? -2: -1; if (x >= 5) return ask? -1: -2; return 20; } if (k == 19) { int x = val.back(); if (x > 10) x -= 10; if (x <= 6) return ask? -2: -1; if (x >= 9) return ask? -1: -2; return 20; } if (k == 20) { int x = val.back(); if (x > 10) x -= 10; if (x > 5) x -= 4; if (x <= 3) return ask? -2: -1; if (x >= 4) return ask? -1: -2; } assert(!"aaa"); } int who_to_ask(int k) { // TODO: generalize int ans[] = {0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0}; return ans[k]; } std::vector<std::vector<int>> devise_strategy(int N) { vector<vector<int>> ans; Loop (i,0,21) { vector<int> vec(N+1); vec[0] = who_to_ask(i); Loop (j,0,N) vec[j+1] = get_nxt(vec[0], i, j); ans.push_back(vec); } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...