Submission #166686

#TimeUsernameProblemLanguageResultExecution timeMemory
166686NaimSSCave (IOI13_cave)C++14
100 / 100
442 ms640 KiB
#include "cave.h" #include <bits/stdc++.h> int S[5050]; int s[5050]; int con[5050]; void exploreCave(int N) { /* ... */ int n = N; for(int i=0;i<n;i++)S[i]=-1; for(int k=0;k<N;k++){ for(int i=0;i<n;i++){ if(S[i]!=-1)s[i] = S[i]; else s[i]=0; } int x = tryCombination(s); if(x>k || x==-1){ //o certo para ele é 0; int l = 0, r = n-1; int pos = -1; while(l<=r){ int m = (l+r)>>1; for(int i=l;i<=m;i++){ if(S[i]==-1)s[i] = 1; } int guess = tryCombination(s); for(int i=l;i<=m;i++){ if(S[i]==-1)s[i] = 0; } if(guess<=k && guess!=-1){ //esta nessa metade r = m-1; pos = m; }else{ //outra metade l = m + 1; } } con[pos] = k; S[pos] = 0; }else{ //o certo para ele é 1; int l = 0, r = n-1; int pos = -1; for(int i=0;i<n;i++){ if(S[i]==-1)s[i] = 1; } while(l<=r){ int m = (l+r)>>1; for(int i=l;i<=m;i++){ if(S[i]==-1)s[i] = 0; } int guess = tryCombination(s); for(int i=l;i<=m;i++){ if(S[i]==-1)s[i] = 1; } if(guess<=k && guess!=-1){ //esta nessa metade r = m-1; pos = m; }else{ //outra metade l = m + 1; } } con[pos] = k; S[pos] = 1; } } answer(S,con); }
#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...