| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 1284102 | taly | Cave (IOI13_cave) | C++20 | 0 ms | 0 KiB | 
#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);
    // for (int i=l; i<=mid; i++){
    //     if(d[i]==-1){
    //         s[i]=1-s[i];
    //     }
    // }
    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, 1, s, d);
        }else{
            solve(0, n-1, i, 0, s, d);
        }
    }
    answer(s, d);
}
