#include <bits/stdc++.h>
#define pii pair<int, int>
#define tii tuple<int, int, int>
#define lli long long
// #define f first
// #define s second
#define pb push_back
using namespace std;
#include "cave.h"
// void exploreCave(int n);
// void answer(int S[],int D[]);
// int tryCombination(int S[]);
void solve(int l, int r, int x, bool b, int s[], int d[]){//b=1 se estava para baixo antes
    if(l==r){
        s[l]=0;
        int tc = tryCombination(s);
        if(tc==x)s[l]=1;
        else s[l]=0;
        d[l]=x;
        return;
    }
    int mid = (l+r)/2;
    for (int i=l; i<=mid; i++){
        if(d[i]==-1){
            s[i]=1-s[i];
        }
    }
    int tc = tryCombination(s);
    if(tc==x&&b==1){
        solve(mid+1, r, x, 1, s, d);
    }else if (tc==x&&b==0){
        solve(l, mid, x, 1, s, d);
    }else if (tc!=x&&b==0){
        solve(mid+1, r, x, 0, s, d);
    }else{
        solve(l, mid, x, 0, s, d);
    }
}
void exploreCave(int n){
    int s[n], d[n];
    for (int i=0; i<n; i++){
        d[i]=-1;
        s[i]=0;
    }
    // vector<int> s(n), d(n, -1);
    int c = 0;
    for (int i=0; i<n; i++){
        int tc = tryCombination(s);
        if(tc==-1)break;
        if(tc>i){
            solve(0, n-1, i, 0, s, d);
        }else{
            solve(0, n-1, i, 1, s, d);
        }
    }
    answer(s, d);
}
| # | 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... |