# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1218505 | nickolasarapidis | Cave (IOI13_cave) | C++20 | 0 ms | 0 KiB |
#include "cave.h"
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5000;
vector<int> S, D;
vector<bool> B; // 0 up 1 down
int first, M;
void solve(int l, int r){
if(l == r){
S[l] = 1;
int f = tryCombination(S);
if(f == -1) f = M;
if(f < first){
S[l] = 0;
B[l] = 1;
D[l] = f;
}
if(f > first){
B[l] = 1;
D[l] = first;
first = f;
}
if(f == first){
S[l] = 0;
}
return;
}
int m = (l + r)/2;
solve(l, m);
solve(m + 1, r);
for(int i = l; i <= r; i++){
if(B[i]) continue;
S[i] = 1;
int f = tryCombination(S);
if(f == -1) f = M;
if(f < first){
S[i] = 0;
B[i] = 1;
D[i] = f;
}
if(f > first){
B[i] = 1;
D[i] = first;
first = f;
}
if(f == first){
S[i] = 0;
}
}
return;
}
void exploreCave(int N){
for(int i = 0; i < N; i++){
S.push_back(0);
B.push_back(false);
}
first = tryCombination(S);
if(first == -1) first = N;
M = N;
solve(0, N - 1);
answer(S, D);
}