#include "prison.h"
#include<bits/stdc++.h>
#include <vector>
using namespace std;
int n;
/// 0 a 1 b
/// 1 2 - A bit 0
/// 3 4 - B bit 1
/// 5 6 - A bit 2
/// 7 8 - B bit 3
/// 9 10 - A bit 4
struct node
{
    int bit, on, was;
    node() {};
    node(int _bit, int _on, int _was)
    {
        bit = _bit;
        on = _on;
        was = _was;
    }
};
node decode(int val)
{
    node ans;
    int bucket = (val - 1) / 2;
    ans.bit = bucket;
    if(val & 1)ans.was = 0;
    else ans.was = 1;
    if(ans.bit % 2 == 0)ans.on = 1;
    else ans.on = 0;
    return ans;
}
int encode(int bit, int on, int was)
{
    assert(bit < 13);
    int base = (bit * 2) + 1;
    if(was == 1)base ++;
    return base;
}
int get_real_bit(int bit, int value)
{
    //cout << 12 - bit + 1 << endl;
   // assert(bit <= 12);
    int realbit = 12-bit;
  //  if(bit == 12)cout << realbit << endl;
    if(value & (1 << realbit))return 1;
    else return 0;
}
std::vector<std::vector<int>> devise_strategy(int N)
{
//   cout << "here "<< endl;
    n = N;
    vector < vector < int > > ans;
    ans.resize(25);
    for (int i = 0; i <= 24; ++ i)
        ans[i].resize(n);
    // ako sme na 0
    ans[0][0] = 1;
    for(int val = 1; val <= n; ++ val)
    {
        int nxt = encode(0, 1, get_real_bit(0, val));
        ans[0][val] = nxt;
      //  cout << nxt << endl;
    }
    for (int i = 1; i <= 24; ++ i)
    {
        node status = decode(i);
      //  cout << "* "<< status.on << " " << endl;
        ans[i][0] = 1 - status.on;
        for (int val = 1; val <= n; ++ val)
        {
            int has = get_real_bit(status.bit, val);
            if(has != status.was)
            {
                if((has == 0 && ans[i][0] == 0) || (has == 1 && ans[i][0] == 1))ans[i][val] = -1;
                else ans[i][val] = -2;
            }
            else if(status.bit < 11)
            {
                node nxt = node(status.bit+1, ans[i][0], get_real_bit(status.bit+1, val));
                int code_nxt = encode(nxt.bit, nxt.on, nxt.was);
                ans[i][val] = code_nxt;
            }
            else if(status.bit == 11)
            {
                int has = get_real_bit(status.bit+1, val);
              //  cout << status.bit+1 << endl;
                if(has == 1)
                {
                    if(ans[i][0])ans[i][val] = -1;
                    else ans[i][val] = -2;
                }
                else
                {
                     if(ans[i][0])ans[i][val] = -2;
                    else ans[i][val] = -1;
                }
            }
            else cout << 0/0 << endl;
            assert(ans[i][val] < 25);
    }
}
return ans;
}
Compilation message (stderr)
prison.cpp: In function 'std::vector<std::vector<int> > devise_strategy(int)':
prison.cpp:106:27: warning: division by zero [-Wdiv-by-zero]
  106 |             else cout << 0/0 << endl;
      |                          ~^~| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |