#include "prison.h"
#include <bits/stdc++.h>
using namespace std;
std::vector<std::vector<int>> devise_strategy(int N) {
vector<vector<int>> res;
vector<int> add(N + 1);
add[0] = 0;
add[1] = -1;
add[N] = -2;
int bit = 1;
res.push_back(add);
vector<vector<int>> later;
while ((1 << (bit + 1)) < N) bit += 1;
for (int i = bit; i >= 0; --i) {
auto na = add;
int nxt = (bit - i) * 3 + 1;
na[0] = 1;
na[N] = -1;
for (int j = 1 << (i + 1); j <= N; ++j) {
na[j] = -1;
}
for (int j = (1 << i) - 1; j >= 1; --j) {
na[j] = -2;
}
for (int j = 1 << i; j < min(N, (1 << (i + 1))); ++j) {
na[j] = nxt;
}
later.push_back(na);
na = add;
for (int j = 2; j < N; ++j) {
if (j >> i & 1) {
if (i != 0) na[j] = nxt + 1;
else na[j] = -2;
} else {
na[j] = nxt + 2;
}
}
res.push_back(na);
na = add;
na[0] = 1;
na[1] = -2;
na[N] = -1;
for (int j = 2; j < N; ++j) {
if (j >> i & 1) {
if (i != 0) na[j] = nxt + 3;
else na[j] = -1;
} else {
na[j] = -2;
}
}
res.push_back(na);
na = add;
na[0] = 1;
na[1] = -2;
na[N] = -1;
for (int j = 2; j < N; ++j) {
if (j >> i & 1) {
na[j] = -1;
} else {
if (i != 0) na[j] = nxt + 3;
else na[j] = -2;
}
}
res.push_back(na);
}
int ptr = res.size();
for (auto v : later) res.push_back(v);
for (int i = 2; i < N; ++i) {
for (int j = bit; j >= 0; --j) {
if (i >> j & 1) {
res[0][i] = ptr + bit - j;
break;
}
}
}
// int _ =0;
// for (auto& v : res) {
// cerr << _++ << " = ";
// for (auto& u : v) {
// cerr << u << " ";
// }
// cerr << "\n";
// }
// cerr << "\n";
// cout << res.size() << "\n";
return res;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |