# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1263223 | blueviolet | Cave (IOI13_cave) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
#define ll long long
#define io(x) if (fopen(x".inp","r")) {freopen(x".inp","r",stdin),freopen(x".out","w",stdout);}
#define TimeRun {End=clock();cerr<<"Time run: "<<(float)(End-Begin)/CLOCKS_PER_SEC<<"s"<<el;}
#define mem(c, x) memset(c, x, sizeof(c))
#define all(c) c.begin(), c.end()
#define bit(i,j) ((i >> j) & 1)
#define se second
#define fi first
#define el '\n'
using namespace std;
template<class X, class Y> bool maximize(X &a, const Y &b) { return (a < b ? a = b, 1 : 0); }
template<class X, class Y> bool minimize(X &a, const Y &b) { return (a > b ? a = b, 1 : 0); }
int dx[8] = {0, 1, 0,-1, 1, 1,-1,-1};
int dy[8] = {1, 0,-1, 0, 1,-1,-1, 1};
const int maxn = 1e5 + 9;
const int Inf = 2e9 + 7;
const ll Infll = 1e18 + 9;
const ll Mod = 1e9 + 7;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
set<int> st;
int n, type[maxn], switchWithDoor[maxn];
int tryCombination(const vector<int> &s);
void answer(vector<int> &S, vector<int> &D);
void exploreCave(int n) {
vector<int> s(n, 0), D(n, 0);
for (int i=0; i<n; i++) st.insert(i);
while (1) {
int firstClosed = tryCombination(s);
if (firstClosed == -1) break;
for (auto id=st.begin(); id!=st.end(); ) {
int pos = *id;
s[pos] ^= 1;
int pp = tryCombination(s);
if (pp == -1) break;
if (pp < firstClosed) {
s[pos] ^= 1;
D[pos] = pp;
++id;
st.erase(pos);
} else
if (pp > firstClosed) {
++id;
D[pos] = firstClosed;
st.erase(pos);
break;
} else { // pp == firstClosed
++id;
s[pos] ^= 1;
}
}
}
answer(s, D);
}