Submission #1191648

#TimeUsernameProblemLanguageResultExecution timeMemory
1191648MateiKing80Prisoner Challenge (IOI22_prison)C++20
65 / 100
10 ms1736 KiB
#include <bits/stdc++.h> using namespace std; const int N = 5000; int n, last = 0; int ans[N + 5][N + 5]; void build(int pos, int bit, int care, bool other, int nxt) { last = max(last, pos); if (pos == 0) { ans[0][0] = 0; for (int i = 1; i <= n; i ++) { if (i & (1 << bit)) ans[0][i] = 2; else ans[0][i] = 1; } build (1, 12, 1, 0, 3); build (2, 12, 1, 1, 3); return; } else { ans[pos][0] = care; for (int i = 1; i <= n; i ++) { if (i & (1 << bit) && !other) //castiga other ans[pos][i] = - (1 - care) - 1; else if (!(i & (1 << bit)) && other) ans[pos][i] = - care - 1; else if (i & (1 << (bit - 1))) { if (bit == 1) //castiga alalalt ans[pos][i] = - (1 - care) - 1; else ans[pos][i] = nxt + 1; } else //if (!(i & (1 << (bit - 1)))) { if (bit == 1) //castig eu ans[pos][i] = - care - 1; else ans[pos][i] = nxt; } } if (other == 1 && bit > 1) { build (nxt, bit - 1, 1 - care, 0, nxt + 2); build (nxt + 1, bit - 1, 1 - care, 1, nxt + 2); } } } vector<vector<int>> devise_strategy(int _n) { n = _n; build (0, 12, 0, 0, 0); vector<vector<int>> strat(last + 1, vector<int>(n + 1)); for (int i = 0; i <= last; i ++) for (int j = 0; j <= n; j ++) strat[i][j] = ans[i][j]; return strat; } /* int main() { int n, a, b, tabla = 0; cin >> n >> a >> b; auto st = devise_strategy(n); while (1) { cout << tabla << '\n'; int ntabla = 0; if (st[tabla][0] == 0) //citeste din a ntabla = st[tabla][a]; else ntabla = st[tabla][b]; if (ntabla < 0) { cout << -ntabla << '\n'; exit(0); } tabla = ntabla; } } */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...