| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1284071 | 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[]);
int s[n], d[n];
void solve(int l, int r, int x, bool b){//b=1 se estava para baixo antes
if(l==r){
s[x]=0;
int tc = tryCombination(s);
if(tc==x)s[x]=1;
else s[x]=0;
d[x]=l;
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);
}else if (tc==x&&b==0){
solve(l, mid, x, 1)
}else if (tc!=x&&b==0){
solve(mid+1, r, x, 0);
}else{
solve(l, mid, x, 0);
}
}
void exploreCave(int n){
for (int i=0; i<n; i++){
d[i]=-1;
s[n]=0;
}
// vector<int> s(n), d(n, -1);
int c = 0;
for (int i=0; i<n; i++){
int tc = tryCombination(s);
if(tc>i){
solve(0, n-1, i, 0);
}else{
solve(0, n-1, i, 1);
}
}
answer(s, d);
}
