제출 #210626

#제출 시각아이디문제언어결과실행 시간메모리
210626peuch동굴 (IOI13_cave)C++17
100 / 100
468 ms512 KiB
    #include "cave.h"
     
    void exploreCave(int N) {
    	int D[N], T[N], S[N];
    	bool type = 0;
    	for(int i = 0; i < N; i++){
    		D[i] = -1;
    		S[i] = 0;
    		T[i] = 0;
    	}
        for(int cur = 0; cur < N; cur++){
        	int ini = 0, fim = N;
        	for(int i = 0; i < N; i++){
       			if(D[i] != -1) T[i] = S[i];
        		else T[i] = 1;
        	}
        	if(tryCombination(T) != cur) type = 1;
        	else type = 0;
        	while(ini < fim - 1){
        		int mid = (ini + fim) >> 1;
        		for(int i = ini; i < mid; i++){
        			if(D[i] != -1) T[i] = S[i];
    	    		else T[i] = type;
        		}
        		for(int i = mid; i < fim; i++){
        			if(D[i] != -1) T[i] = S[i];
    	    		else T[i] = !type;
        		}
        		int last = tryCombination(T);
        		if(last == cur){
        			for(int i = ini; i < mid; i++){
        				if(D[i] != -1) T[i] = S[i];
    	    			else T[i] = !type;
        			}
        			for(int i = mid; i < fim; i++){
        				if(D[i] != -1) T[i] = S[i];
    	    			else T[i] = type;
        			}
        			ini = mid;
        		}
        		else fim = mid;
        	}
        	D[ini] = cur;
        	S[ini] = type;
        }
        answer(S, D);
    }
#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...