제출 #145006

#제출 시각아이디문제언어결과실행 시간메모리
145006youssefbou62동굴 (IOI13_cave)C++14
13 / 100
50 ms588 KiB
    #include  <bits/stdc++.h>
    #include "cave.h"
    using namespace std;
     
    #define mp make_pair
    #define fi first
    #define se second
    #define all(v) v.begin(),v.end()
    #define allarr(a) a , a + n
    #define ll long long
    #define ull unsigned long long 
    #define pb push_back
    #define fastio ios_base::sync_with_stdio(false) ; cin.tie(NULL); cout.tie(NULL)
    typedef pair<int, int> pi;
    typedef pair<ll,ll> pll; 
    typedef pair<int,pi> trp ;
    typedef vector<pi> vpi;
    typedef vector<pll> vpll ;
    // int ab  (int  x ) { return (x>0?x:-x); }
     
     
    int n ,reply; 
    int cnt = 0 ; 
    int door[5005],Comb[5005]; 
    int TryCombination(int S[]){
    	cnt++; 
    	return tryCombination(S); 
    	// for(int i = 0 ; i < n ; i++ )cout << S[i]; cout << endl; 
    	// int answer ; 
    	// cin >> answer; 
    	// return answer; 

    }

    void rev(int l , int r ){
    	for(int i = l ; i <= r  ; i++ )if( door[i]==-1)Comb[i]=!Comb[i]; 
    }
    void exploreCave(int N){
    	
    	n = N ; 
    	memset(door,-1,sizeof door); 
    	memset(Comb,0,sizeof Comb); 


    	for(int T = 0 ; T < N ; T++ ){
    		// cerr <<"first try "<<endl; 
    		int FI = TryCombination(Comb); 
    		reply = FI ;
    		if( reply == -1 )break ; 
    		int l = 0 , r  =N-1 ; 
    		while ( r-l>0){
    			int mid = (l+r)/2; 
    			rev(l,mid); 
    			// cerr <<"mid is "<<mid << endl;
    			reply = TryCombination(Comb);
    			if( reply == -1 )break;  
    			rev(l,mid); 
    			if( reply == FI && mid == l ){
    				// ans is r 
    				Comb[r]=!Comb[r]; 
    				// cerr <<"found door of "<<r<<" is "<<reply<<" correct ans is " << Comb[r]<<endl; 
    				door[r] = reply; 
    				break ; 
    			}else if( reply != FI && mid == l ){

    				Comb[l]=!Comb[l]; 
    				// cerr <<"found door of "<<r<<" is "<<reply<<" correct ans is " << Comb[r]<<endl; 
    				door[l]=reply;
    				break; 
    			}
    			if( reply == FI )l = mid ; 
    			else r = mid ;   
    		}
    		if( reply == -1 )break ; 
    		// assert(reply == -1 || l == r ); 
    		// if( l == r )door[l]=reply; 
    	}
    	assert(TryCombination(Comb)==-1); 
    	for(int i = 0 ; i < n ; i++ )if( door[i]==-1 ){
    		rev(i,i); 
    		reply = TryCombination(Comb); 
    		rev(i,i); 
    		door[i]=reply; 
    	}
    	answer(Comb,door); 
    	// for(int i = 0; i < n ; i++ )cerr << Comb[i]; cerr << endl; 
    	// for(int i =0 ;i < n ;i++ )cerr << door[i] ; cerr <<endl; 
    }

// int main(){
// 	cin >> n ; 
// 	exploreCave(n); 
// }
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…