//#include "prison.h"
#include <vector>
using namespace std;
vector < vector < int > > devise_strategy(int n)
{
int lg = 1;
int cur = 2;
while(cur <= n)
{
lg++;
cur *= 2;
}
vector < vector < int > > ans;
ans.resize(2 * lg + 1);
for(int i = 0; i <= 2 * lg; i++)
{
ans[i].resize(n + 1, 0);
}
for(int sees = 1; sees <= n; sees++)
{
int which = lg - 1;
bool bit = (bool)(sees & (1 << which));
ans[0][sees] = bit + 1;
}
for(int reads = 1; reads <= 2 * lg; reads++)
{
int whole = reads / 2 + reads % 2;
if(whole % 2 == 0)
ans[reads][0] = 0;
else
ans[reads][0] = 1;
for(int sees = 1; sees <= n; sees++)
{
bool bita = !(reads % 2);
int which = lg - whole;
bool bitb = (bool)(sees & (1 << which));
if(bita < bitb)
{
if(whole % 2 == 0)
ans[reads][sees] = -2;
else
ans[reads][sees] = -1;
}
else if(bita > bitb)
{
if(whole % 2 == 0)
ans[reads][sees] = -1;
else
ans[reads][sees] = -2;
}
else
{
if(whole == lg)
{
ans[reads][sees] = 0;
}
else
{
bool nxtbit = (bool)(sees & (1 << (which - 1)));
int writes = 2 * whole + nxtbit + 1;
ans[reads][sees] = writes;
}
}
}
}
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... |