제출 #235342

#제출 시각아이디문제언어결과실행 시간메모리
235342crossing0ver동굴 (IOI13_cave)C++17
25 / 100
293 ms640 KiB
#include<bits/stdc++.h>
#include "cave.h"
using namespace std;
int n,type[5005],P[5000],oc[5000],C[5000];

int  ask(int S[]) {
	int x =  tryCombination(S);
	if (x == -1) x = n;
	return x;
}
void exploreCave(int N) {
	n = N;
	int A[N];
	for (int i =0 ; i < n; i++) 
		A[i] = 0;
	for (int pos = 0;pos < n; pos++) {
		int l = 0, r = n - 1;
	int x = ask(A);
	if (pos < x) type[pos] = 0,A[pos] = 0;
			else type[pos] = 1, A[pos] = 1;
	
	while (l != r) {
		int m = (l + r)/2;
		for (int i = l; i <= m; i++) if (!oc[i]) A[i]^=1;
		int x = ask(A);
		if (pos < x) {
			for (int i = l; i <= m; i++) if (!oc[i]) A[i]^=1;
			l = m + 1;		
		}
		else {r = m;
		for (int i = l; i <= m; i++) if (!oc[i]) A[i]^=1; }
	}
	x = l;
	oc[x] = 1;
	C[x] = type[pos]; 
	P[x] = pos;
	}
	int S[N],D[N];
	for (int i = 0; i < n; i++)
		S[i] = C[i], 
		D[i] = P[i];
	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...