Submission #1076475

#TimeUsernameProblemLanguageResultExecution timeMemory
1076475juicyCave (IOI13_cave)C++17
13 / 100
98 ms628 KiB
#include "cave.h"

#include <bits/stdc++.h>

int S[5000], D[5000], q[5000];

void exploreCave(int N) {
    memset(S, -1, sizeof(S));
    auto search = [&]() {
        std::vector<int> cands;
        for (int i = 0; i < N; ++i) {
            if (S[i] != -1) {
                q[i] = S[i];
            } else {
                cands.push_back(i);
                q[i] = 0;
            }
        }
        int door = tryCombination(q);
        if (door == -1) {
            q[cands[0]] = 1;
            door = tryCombination(q);
            D[cands[0]] = door;
            S[cands[0]] = 0;
            return;
        }
        int l = 0, r = cands.size() - 1, p = -1;
        while (l <= r) {
            int md = (l + r) / 2;
            for (int i = 0; i < md; ++i) {
                q[cands[i]] = 1;
            }
            if (tryCombination(q) == door) {
                p = md;
                l = md + 1;
            } else {
                r = md - 1;
            }
            for (int i = 0; i < md; ++i) {
                q[cands[i]] = 0;
            }
        }
        D[cands[p]] = door;
        S[cands[p]] = 1;
    };
    int cnt = 0;
    while (cnt++ < N) {
        search();
    }
    answer(S, D);
}
#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...