# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1195009 | prideliqueee | Cave (IOI13_cave) | C++20 | 0 ms | 0 KiB |
#include "cave.h"
void exploreCave(int N) {
int sw[N];
memset(sw,0,sizeof sw);
int x[N];
for(int i=0;i<N;i++)
x[i]=0;
int index[N];
int l=0,r=N-1;
for(int i=0;i<N;i++)
{
int p=tryCombination(sw);
if(p!=i)
{
for(int i=l;i<=r;i++)
sw[x[i]]=!sw[x[i]];
}
int cur[N];
for(int i=0;i<N;i++)
cur[i]=sw[i];
int ll=l,rr=r;
while(ll<rr)
{
int mid=(ll+rr)/2;
for(int i=ll;i<=mid;i++)
{
cur[x[i]]=!cur[x[i]];
}
p=tryCombination(cur);
for(int i=ll;i<=mid;i++)
{
cur[x[i]]=!cur[x[i]];
}
if(p!=i)
rr=mid;
else
ll=mid+1;
}
index[x[ll]]=i;
for(int i=ll;i<r;i++)
x[i]=x[i+1];
r++;
}
answer(sw,index);
}