# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1267630 | ti24dung_nt | 동굴 (IOI13_cave) | C++20 | 0 ms | 0 KiB |
#include "cave.h"
void exploreCave(int n)
{
int s[n], d[n], swch[n], stateOpen[n];
for(int door = 0; door < n; ++door)
{
for(int i = 0; i < n; ++i) s[i] = 0;
for(int j = 0; j < i; ++j) s[swch[j]] = stateOpen[j];
int losestDoor = tryCombination(s);
if(losestDoor == door) stateOpen[door] = 1;
else stateOpen[door] = 0;
int l = 0, r = n - 1;
while(l < r)
{
int mid = (l + r) / 2;
for(int i = 0; i < n; ++i)
{
if(i <= mid) s[i] = 0;
else s[i] = 1;
}
for(int j = 0; j < i; ++j) s[swch[j]] = stateOpen[j];
losestDoor = tryCombination(s);
if(losestDoor == door)
{
if(stateOpen[door] == 0) l = mid + 1;
else r = mid;
}
else
{
if(stateOpen[door] == 0) r = mid;
else l = mid;
}
}
d[l] = door;
swch[door] = l;
}
answer(s, d);
}