제출 #284035

#제출 시각아이디문제언어결과실행 시간메모리
284035Bill_00동굴 (IOI13_cave)C++14
0 / 100
40 ms384 KiB
#include "cave.h"
int p[10000]={0},a[10000],up[10000];
void dfs(int l,int r,int L,int R,int id){
	for(int i=L;i<=R;i++){
		if(p[i]!=0) continue;
		a[i]+=1;
		a[i]%=2;
	}
	int k=tryCombination(a);
	if(L==R && k!=id){
		p[L+1]=id;
		up[L+1]=a[L+1];
		return;
	}
	if(L==R && k==id){
		p[L]=id;
		up[L]=a[L];
		return;
	}
	if(k==id){
		dfs(L,R,L,(L+R)/2,id);
	}
	else dfs(R+1,l,R+1,(R+1+l)/2,id);
}
void bfs(int l,int r,int L,int R,int id){
	for(int i=L;i<=R;i++){
		if(p[i]!=0) continue;
		a[i]+=1;
		a[i]%=2;
	}
	int k=tryCombination(a);
	if(L==R && k==id){
		p[L+1]=id;
		up[L+1]=a[L+1];
		return;
	}
	if(L==R && k!=id){
		p[L]=id;
		up[L]=a[L];
		return;
	}
	if(k!=id){
		bfs(L,R,L,(L+R)/2,id);
	}
	else bfs(R+1,l,R+1,(R+1+l)/2,id);
}
void exploreCave(int n) {
    for(int i=0;i<n;i++){
    	a[i]=1;
	}
	for(int i=1;i<=n;i++){
		int k=tryCombination(a);
		if(k!=i){
			dfs(0,n-1,0,(n-1)/2,i);
		}
		else bfs(0,n-1,0,(n-1)/2,i);
	}
	answer(up,p);
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…