Advertisement
Guest User

Untitled

a guest
Jul 13th, 2013
930
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.21 KB | None | 0 0
  1. #include "cave.h"
  2. #include <cstdio>
  3. #include <cstring>
  4. using namespace std;
  5.  
  6. const int MAXN = 5001;
  7. int status[MAXN] , door[MAXN] , guess[MAXN];
  8.  
  9. void exploreCave(int N){
  10.     memset(door , -1 , sizeof(door));
  11.     for(int n = 0 ; n < N ; n++){
  12.          int r = tryCombination(status);
  13.          int low = 0 , high = N - 1;
  14.          while(low != high){
  15.             bool changed = false;
  16.                     int a = low , b = (low + high) / 2;
  17.                 for(int i = 0 ; i < N ; i++){
  18.             if(i >= a && i <= b){
  19.                 if(door[i] != -1)
  20.                              guess[i] = status[i];
  21.                             else {
  22.                     guess[i] = !status[i];
  23.                     changed = true;
  24.                 }
  25.                        }
  26.                        else guess[i] = status[i];
  27.              }
  28.                     int K = r;
  29.             if(changed) K = tryCombination(guess);
  30.                 if(r == n){
  31.                     if(K > n || K == -1)
  32.                         high = b;
  33.                     else low = b + 1;
  34.                 }
  35.                 else {
  36.                     if(K == n) high = b;
  37.                     else low = b + 1;
  38.                 }
  39.          }
  40.          door[low] = n;
  41.          if(r == n) status[low] = !status[low];
  42.     }
  43.     answer(status , door);
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement