Submission #1208589

#TimeUsernameProblemLanguageResultExecution timeMemory
1208589peraCave (IOI13_cave)C++20
0 / 100
76 ms584 KiB
#include<bits/stdc++.h>
#include "cave.h"
using namespace std;
void exploreCave(int N) {
   int S[N] , D[N] , W[N];
   memset(S , 0 , sizeof(S));
   memset(W , 0 , sizeof(W));
   int u;
   vector<int> v;
   for(int i = 0;i < N;i ++){
      v.push_back(i);
   }
   int C = 0;
   auto add = [&](){
      ++C;
      assert(C < 50000);
   };
   while(true){
      add();
      u = tryCombination(W);
      if(u == -1){
         break;
      }
      auto assign = [&](int m){
         for(int i = 0;i <= m;i ++){
            W[v[i]] = 1;
         }
         add();
         int A = tryCombination(W);
         for(int i = 0;i <= m;i ++){
            W[v[i]] = 0;
         }
         return (A != u);
      }; 
      int l = 0 , r = (int)v.size() - 1 , ans = -1;
      while(l <= r){
         int m = (l + r) / 2;
         if(assign(m)){
            ans = m;
            r = m - 1;
         }else{
            l = m + 1;
         }
      }
      ans = v[ans];
      v.erase(find(v.begin() , v.end() , ans));
      S[ans] = W[ans] = 1;
      D[ans] = u;
   }
   for(int i = 0;i < N;i ++){
      W[i] = 1;
   }
   while(!v.empty()){
      add();
      int u = tryCombination(W);
      auto assign = [&](int m){
         for(int i = 0;i <= m;i ++){
            W[v[i]] = 0;
         }
         add();
         int A = tryCombination(W);
         for(int i = 0;i <= m;i ++){
            W[v[i]] = 1;
         }
         return (A != u);
      }; 
      int l = 0 , r = (int)v.size() - 1 , ans;
      while(l <= r){
         int m = (l + r) / 2;
         if(assign(m)){
            ans = m;
            r = m - 1;
         }else{
            l = m + 1;
         }
      }
      ans = v[ans];
      v.erase(find(v.begin() , v.end() , ans));
      S[ans] = W[ans] = 0;
      D[ans] = u;
   }
   answer(S , D);
   return;
}
#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...