제출 #1009593

#제출 시각아이디문제언어결과실행 시간메모리
1009593NewtonabcCave (IOI13_cave)C++14
64 / 100
183 ms556 KiB
#include "cave.h"
#include<bits/stdc++.h>
using namespace std;
/*int tryCombination(int arr[]){
	int ttmp=4;
	for(int i=0;i<ttmp;i++) cout<<arr[i] <<" ";
	cout<<"\n";
	int s;
	cin>>s;
	return s;
}*/
void exploreCave(int N) {
	bool one;
    int arr[N],fix[N],cn[N];
    for(int i=0;i<N;i++) arr[i]=fix[i]=cn[i]=0;
    for(int i=0;i<N;i++){
    	int l=0,r=N-1;
    	for(int j=0;j<N;j++) if(!fix[j]) arr[j]=1;
    	int tmp=tryCombination(arr);
    	if(tmp==-1) tmp=INT_MAX;
    	if(tmp>i) one=true;
    	else one=false;
    	while(l<r){
    		int mid=(l+r)/2;
    		if(one){
    			for(int j=l;j<=mid;j++) if(!fix[j]) arr[j]=1;
    			for(int j=mid+1;j<=r;j++) if(!fix[j]) arr[j]=0;
    			tmp=tryCombination(arr);
    			if(tmp==-1) tmp=INT_MAX;
    			if(tmp>i) r=mid;
				else l=mid+1;
			}
			else{
				for(int j=l;j<=mid;j++) if(!fix[j]) arr[j]=0;
    			for(int j=mid+1;j<=r;j++) if(!fix[j]) arr[j]=1;
    			tmp=tryCombination(arr);
    			if(tmp==-1) tmp=INT_MAX;
    			if(tmp>i) r=mid;
				else l=mid+1;
			}
    		if(l==r){
    			arr[l]=one;
    			cn[l]=i;
    			fix[l]=1;
			}
		}
	}
	if(N==1){
		if(one) arr[0]=1;
		answer(arr,cn);
		return;
	}
	/*cout<<endl <<endl <<endl;
	for(int i=0;i<N;i++) cout<<arr[i] <<" ";
	for(int i=0;i<N;i++) cout<<cn[i] <<" ";*/
	answer(arr,cn);
}
/*int main(){
	exploreCave(4);
}*/
#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...