제출 #335264

#제출 시각아이디문제언어결과실행 시간메모리
335264bigDuck동굴 (IOI13_cave)C++14
100 / 100
272 ms748 KiB
#include<bits/stdc++.h>
#include "cave.h"
using namespace std;
#define INIT  ios_base :: sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define mp make_pair
#define pb push_back
#define ft first
#define sc second
#define ll long long
#define pii pair<int, int>
#define count_bits __builtin_popcount
//#define int ll








int n;

int s[5010];
int  d[5010];
bool v[5010];


/*void answer(int S[],int D[]){
cout<<"S: ";
for(int i=0; i<n; i++){
    cout<<s[i]<<" ";
}cout<<"\n";

cout<<"D: ";
for(int i=0; i<n; i++){
    cout<<d[i]<<" ";
}cout<<"\n"<<flush;


}*/



/*int tryCombination(int S[]){

for(int i=0; i<n; i++){
    cout<<s[i]<<" ";
}cout<<"\n"<<flush;
int res;
cin>>res;
return res;
}*/


void door_state(int ind, bool &st){

int crd=tryCombination(s);
crd--;
if( (crd>=ind) || (crd==-2) ){
    st=true;
}
else{
    st=false;
}

return;
}



void query(int ind, bool &st){


int l=0, r=(n-1), m=(l+r)>>1;
//st-state: 0-closed, 1-open;


while(l<r){
        m=(l+r)>>1;
    for(int i=l; i<=m; i++){
        if(!v[i]){
            s[i]=s[i]^1;
        }
    }
    bool st0=st;
    door_state(ind, st);

    if(st0!=st){
        r=m; m=(l+r)>>1; continue;
    }


    l=(m+1); m=(l+r)>>1;

}

if(st==false){
    s[m]^=1;
}
d[m]=ind;
v[m]=true;

}








void exploreCave(int N){
n=N;

for(int i=0; i<n; i++){
    bool st=false;
    door_state(i, st);
    query(i, st);
}

answer(s, d);

}

















/*int32_t main(){
INIT
int N; cin>>N;
exploreCave(N);





return 0;
}*/



#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...