Submission #1337817

#TimeUsernameProblemLanguageResultExecution timeMemory
1337817kutomei3Cave (IOI13_cave)C++20
12 / 100
417 ms516 KiB
#include "cave.h"
#include <bits/stdc++.h>

int ask(int curr[], int op[], int n, int mid, int val) {
    int s[n];
    for (int i = 0; i < n; i++) s[i] = -1;
    for (int i = 0; i < n; i++) {
        if (curr[i] == -1) break;
        s[curr[i]] = op[i];
    }
    for (int i = 0; i < n; i++) {
        if (s[i] != -1) continue; 
        if (i <= mid) s[i] = val;
        else s[i] = val ^ 1;
    }
    int p = tryCombination(s);
    if (p == -1) p = n + 2;
    return p;
}

void exploreCave(int n) {
    int curr[n];
    for (int i = 0; i < n; i++) curr[i] = -1;
    int op[n];
    for (int i = 0; i < n; i++) {
        if (ask(curr, op, n, n - 1, 0) > i) op[i] = 0;
        else op[i] = 1;

        int l = 0;
        int r = n - 1;
        while (r > l) {
            int mid = (r + l) >> 1;
            if (ask(curr, op, n, mid, op[i]) > i) r = mid;
            else l = mid + 1;
        }

        curr[i] = l;
    }

    answer(op, curr);
}
#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...