Submission #650940

#TimeUsernameProblemLanguageResultExecution timeMemory
650940LitusianoCave (IOI13_cave)C++14
0 / 100
396 ms464 KiB
#include "cave.h"
#include<bits/stdc++.h>
using namespace std;
 
#define MAX_N 5000
int v[MAX_N];
bool used[MAX_N];
 
void convert(int idx, int val){
  for(int i = 0; i<= idx; i++){
    if(used[i]) continue;
    v[i] = val;
  }
}
 
void exploreCave(int N) {
  /* ... */
  //int v[N];
  for(int i = 0; i<N; i++){
    v[i] = 0;
  }
  int s[N];
  // Busco combinacio correcte
  for(int i = 0; i<N; i++){
    bool ok = 0;
    int l = -1; int r = N-1;
    int val = 0; 
    convert(N-1,0);
    if(i == 2){
      /*cout<<"V ";
      for(int i = 0; i<N; i++) cout<<v[i]<<" ";
      cout<<endl;*/
    }
    if(tryCombination(v) == i) val = 1;
    convert(N-1,val^1);
    while(r > l+1){
      int m = (l+r)/2;
      convert(m,val);
      
      // si s'ha obert,
      int x = tryCombination(v);
      if (x == -1){
        ok = 1; break;
      }
      if(x == i){
        //tancat
        l = m;
      }
      else r = m;
      convert(m,val^1);
    }
    if(ok) break;
    //cout<<i<<" "<<l<<" "<<r<<" "<<val<<endl;
    used[r] = 1;
    v[r] = val;
    s[r] = i;
  }
  /*int idx = 0;
  for(int i = 0; i<N;i++){
    if(!used[i]) idx = i;
  }
  v[idx] = 0;*/
  /*if(tryCombination(v) != -1) v[idx] = 1;
  for(int i = 0; i<N; i++){
      v[i] ^= 1;
      s[i] = tryCombination(v);
      v[i] ^= 1;
  }*/
  answer(v,s);
  //for(int i = 0; i<N; i++) cout<<v[i]<<" "; cout<<endl;
  //for(int i = 0; i<N; i++) cout<<s[i]<<" "; cout<<endl;
  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...