Submission #650797

#TimeUsernameProblemLanguageResultExecution timeMemory
650797LitusianoCave (IOI13_cave)C++14
13 / 100
2086 ms632 KiB
#include "cave.h"
#include<bits/stdc++.h>
using namespace std;
//#define int long long

map<int,int> used;

void convert(int (&v)[],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(v,N,0);
    if(tryCombination(v) == i) val = 1;
    while(r > l+1){
      int m = (l+r)/2;
      convert(v,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(v,m,val^1);
    }
    if(ok) break;
    int prev = v[l];
    v[l] = val;
    if(!used[l] && tryCombination(v) > i){
      used[l] = 1;
    }
    else{
      used[r] = 1;
      v[r] = val;
      v[l] = prev;
    }
  }
  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...