Submission #1217024

#TimeUsernameProblemLanguageResultExecution timeMemory
1217024lukasuliashviliCave (IOI13_cave)C++20
0 / 100
431 ms516 KiB
#include "cave.h"
#include <vector>
using namespace std;

void exploreCave(int N) {
    vector<int> s(N, 0);         // current guess for switch states
    vector<int> finalSwitch(N);  // correct states of switches
    vector<int> doorToSwitch(N); // which switch controls each door
    vector<bool> used(N, false); // mark switches already assigned

    for (int d = 0; d < N; ++d) {
        int low = 0, high = N - 1, found = -1;

        // Binary search to find the switch controlling door d
        while (low <= high) {
            int mid = (low + high) / 2;
            for (int i = 0; i < N; ++i) {
                if (used[i]) continue;
                s[i] = 0;
            }
            for (int i = low; i <= mid; ++i) {
                if (!used[i]) s[i] = 1;
            }

            int res = tryCombination(s.data());

            if (res == d || res == -1) {
                // Found the switch in [low, mid]
                found = -1;
                for (int i = low; i <= mid; ++i) {
                    if (!used[i]) {
                        found = i;
                        break;
                    }
                }
                high = mid - 1;
            } else {
                low = mid + 1;
            }
        }

        // Find correct state (0 or 1) for switch `found`
        s[found] = 0;
        for (int i = 0; i < N; ++i)
            if (!used[i] && i != found) s[i] = 0;

        int res0 = tryCombination(s.data());

        finalSwitch[found] = (res0 == d || res0 == -1) ? 0 : 1;
        doorToSwitch[found] = d;
        used[found] = true;
    }

    answer(finalSwitch.data(), doorToSwitch.data());
}
#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...