#include <bits/stdc++.h>
#include "prison.h"
using namespace std;
const int x = 22;
vector<int> p3;
int bit3(int num, int bit) {
int multAct = bit;
while (num > p3[multAct]) multAct++;
while (multAct != bit) {
while (num >= p3[multAct])
num -= p3[multAct];
multAct--;
}
int reponse = 0;
while (num >= (p3[multAct])) {
num -= p3[multAct];
reponse++;
}
return reponse;
}
vector<vector<int>> devise_strategy(int N) {
p3.resize(13);
p3[0] = 1;
for (int i = 1; i <= 12; i++) p3[i] = p3[i-1]*3;
vector<vector<int>> s(x+1, vector<int>(N+1));
int iBit = 7;
s[0][0] = 0;
for (int A = 1; A <= N; A++) {
s[0][A] = bit3(A, iBit)+1;
}
int idx = 1;
while (iBit >= 2) {
for (int i = 0; i < 3; i++) {
s[idx][0] = ((7-iBit)%2==0?1:0);
int num = 1;
while (num <= N) {
if (bit3(num, iBit) < i) {
s[idx][num] = ((7-iBit+1)%2==0?-1:-2);
}
if (bit3(num, iBit) == i) {
s[idx][num] = bit3(num, iBit-1)+(7-iBit+1)*3+1;
}
if (bit3(num, iBit) > i) {
s[idx][num] = ((7-iBit+1)%2==0?-2:-1);
}
num++;
}
idx++;
}
iBit--;
}
for (int i = 0; i < 3; i++) {
s[idx][0] = ((7-iBit)%2==0?1:0);
int num = 1;
while (num <= N) {
if (bit3(num, iBit) == 0) {
s[idx][num] = ((7-iBit+1)%2==0?-1:-2);
}
if (bit3(num, iBit) == 1) {
s[idx][num] = idx+1;
}
if (bit3(num, iBit) > i) {
s[idx][num] = ((7-iBit+1)%2==0?-2:-1);
}
num++;
}
}
iBit--;
int num = 1;
while (num <= N) {
if (bit3(num, iBit) == 0) {
s[idx][num] = ((7-iBit+1)%2==0?-1:-2);
}
if (bit3(num, iBit) == 2) {
s[idx][num] = ((7-iBit+1)%2==0?-2:-1);
}
num++;
}
// for (auto i : s) {
// for (auto i2 : i) {
// cerr << i2 << ' ';
// }
// cerr <<'\n';
// }
return s;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |