Submission #1289854

#TimeUsernameProblemLanguageResultExecution timeMemory
1289854kahoulCave (IOI13_cave)C++20
51 / 100
30 ms476 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...