# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
309438 | 2020-10-03T13:56:22 Z | cig32 | Cave (IOI13_cave) | C++14 | 0 ms | 0 KB |
void exploreCave(int N) { // TODO: implementation int S[N],D[N]; bool solved[N]; for(int i=0;i<N;i++){ solved[i]=false; D[i]=-1; } for(int i=0;i<N;i++){ int candidates[N]; int ppt=0; for(int j=0;j<N;j++){ if(solved[j]==false){ S[j]=0; candidates[ppt]=j; ppt++; } } int lb=0, rb=ppt-1; int res=tryCombination(S); int opt=(res==i?1:0); for(int j=0;j<N;j++){ if(solved[j]==false){ S[j]=1-opt; } } res=tryCombination(S); while(lb<rb){ int mid=(lb+rb)/2; for(int j=lb;j<=mid;j++){ if(solved[candidates[j]])continue; S[candidates[j]]=1-S[candidates[j]]; } int now=tryCombination(S); for(int j=lb;j<=mid;j++){ if(solved[candidates[j]])continue; S[candidates[j]]=1-S[candidates[j]]; } if(now!=res){ rb=mid; } else{ lb=mid+1; } } solved[candidates[lb]]=true; S[candidates[lb]]=opt; D[candidates[lb]]=i; } answer(S,D); }