| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1311525 | kustov_vadim_533 | Cave (IOI13_cave) | C++20 | 0 ms | 0 KiB |
#include "grader.h"
const int MAXN = 5000;
int p[MAXN], f[MAXN], us[MAXN];
void solve(int l, int r, int res) {
for (int i = l; i < r; ++i) {
if (!us[i]) f[i] = 1 - f[i];
}
int c = tryCombination(f);
if (c > res || c == -1) {
if (r - l == 1) {
us[l] = 1;
}
return;
}
for (int i = l; i < r; ++i) {
if (!us[i]) f[i] = 1 - f[i];
}
if (r - l == 1) {
us[l] = us[l] | (c < res);
return;
}
int m = (l + r) / 2;
solve(l, m, res);
solve(m, r, res);
}
void exploreCave(int N) {
for (int i = 0; i < N; ++i) {
f[i] = 0;
us[i] = 0;
}
for (int res = tryCombination(f); res != -1; res = tryCombination(f)) {
solve(0, N, res);
}
for (int i = 0; i < N; ++i) {
f[i] = 1 - f[i];
p[i] = tryCombination(f);
f[i] = 1 - f[i];
}
answer(f, p);
}
