#include "prison.h"
#include<bits/stdc++.h>
#include <vector>
using namespace std;
int n;
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 / 3;
ans.bit = bucket;
int ost = val % 3;
if(ost == 0)
{
ans.on = 0;
ans.was = 0;
}
else
{
ans.on = 1;
if(ost == 1)
ans.was = 0;
else ans.was = 1;
}
//cout << val << " " << ans.bit << " " << ans.on << " " << ans.was << endl;
return ans;
}
int encode(int bit, int on, int was)
{
int res = bit * 3 + on + was;
// cout << bit << " " << on << " " << was << " -> " << res << endl;
return res;
}
int get_real_bit(int bit, int value)
{
int realbit = 12-bit;
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(40);
for (int i = 0; i < 40; ++ i)
ans[i].resize(n+1);
for (int i = 0; i < 39; ++ i)
{
node status = decode(i);
ans[i][0] = status.on;
if(status.on == 0)
{
for (int val = 1; val <= n; ++ val)
{
node nxt = node(status.bit, 1, get_real_bit(status.bit, val));
int code_nxt = encode(nxt.bit, nxt.on, nxt.was);
ans[i][val] = code_nxt;
}
}
else
{
for (int val = 1; val <= n; ++ val)
{
node nxt = node(status.bit+1, 0, 0);
int has = get_real_bit(status.bit, val);
if(has != status.was)
{
if(has == 0)ans[i][val] = -2;
else ans[i][val] = -1;
}
else
{
int code_nxt = encode(nxt.bit, nxt.on, nxt.was);
ans[i][val] = code_nxt;
}
}
}
}
// cout << "ended " << endl;
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |