Submission #281736

#TimeUsernameProblemLanguageResultExecution timeMemory
281736amoo_safarCave (IOI13_cave)C++17
100 / 100
666 ms720 KiB
#include "cave.h"

#include <bits/stdc++.h>

using namespace std;

const int N = 5010;

int n, S[N], D[N];

int Ask(){
	int res = tryCombination(S);
	//cerr << "R : " << res << '\n';
	if(res == -1) return n;
	return res;
}

void exploreCave(int _n) {
	n = _n;
	vector<int> V(n);
	iota(V.begin(), V.end(), 0);

	for(int it = 1; it <= n; it++){
		for(auto x : V) S[x] = 0;
		int cor = 0;
		if(Ask() < it) cor = 1;
		
		int L = -1, R = V.size() - 1;
		int mid;
		while(L + 1 < R){
			mid = (L + R) >> 1;
			for(int i = 0; i <= mid; i++) S[V[i]] = cor;
			for(int i = mid + 1; i < (int) V.size(); i++) S[V[i]] = cor ^ 1;
			if(Ask() >= it) R = mid;
			else L = mid;
		}
		//cerr << "##\n";
		S[V[R]] = cor;
		D[V[R]] = it - 1;
		V.erase(V.begin() + R);
	}
	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...