#include <bits/stdc++.h>
using namespace std;
#include "cave.h"
const int maxn = 2005;
bool visited[maxn];
int s[maxn];
int lever_door[maxn];
void set_all_to (int l, int r, int x) {
for (int i = l; i <= r; i++) {
if (visited[i]) continue;
s[i] = x;
}
}
void divide (int l, int r, int d) {
//scout << "call " << l << ' ' << r << '\n';
if (l == r) {
s[l] = 1;
int door = tryCombination(s);
if (door == d) s[l] = 0;
//cout << "LEVER " << l << ' ' << s[l] << ' ' << lever_door[l] << '\n';
lever_door[l] = d;
visited[l] = 1;
return;
}
int m = (l + r) / 2;
set_all_to(l, m, 0);
int door0 = tryCombination(s);
set_all_to(l, m, 1);
int door1 = tryCombination(s);
//cout << door0 << ' ' << door1 << '\n';
if (door0 != door1 && (door0 == d || door1 == d)) {
divide(l, m, d);
} else {
divide(m + 1, r, d);
}
}
void exploreCave (int n) {
for (int i = 0; i < n; i++) {
s[i] = 0;
}
for (int i = 0; i < n; i++) {
divide(0, n - 1, i);
//cout << '\n';
}
answer(s, lever_door);
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |