Submission #134450

#TimeUsernameProblemLanguageResultExecution timeMemory
134450arthurconmyCave (IOI13_cave)C++14
100 / 100
323 ms536 KiB
#include <bits/stdc++.h> using namespace std; #ifndef ARTHUR_LOCAL #include "cave.h" #endif #ifdef ARTHUR_LOCAL int tryCombination(int an_S[]) { cout << "TRYING: "; for(int i=0; i<4; i++) cout << an_S[i] << " "; cout << endl; int ans=-1; if(an_S[0]!=1) ans=3; if(an_S[3]!=0) ans=2; if(an_S[1]!=1) ans=1; if(an_S[2]!=1) ans=0; cout << ans << endl; return ans; } #endif void exploreCave(int n) { int D[n]; int S[n]; for(int i=0; i<n; i++) { S[i]=0; D[i]=0; } if(n==1) { if(tryCombination(S)==-1) answer(S,D); S[0]=1; answer(S,D); } vector<int> lock(n); for(int i=0; i<n; i++) { int l=0; int r=n-1; // door i is controlled by a switch in the range between l and r int now=-1; int cur=-1; bool first_go=1; while(l<r) { // cout << l << " " << r << endl; if(first_go) { cur = tryCombination(S); first_go=0; } else cur = now; int mid = int((l+r)/2); for(int j=l; j<=mid; j++) { if(!lock[j]) S[j]=1-S[j]; } now = tryCombination(S); if(cur==now || (cur!=i && now!=i)) { // cout << cur <<" " << now << " " << i << " " << mid << endl; l = mid+1; } else { r=mid; } } if(now == i) S[l]=1-S[l]; lock[l]=1; D[l]=i; } answer(S,D); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...