Submission #1147512

#TimeUsernameProblemLanguageResultExecution timeMemory
1147512KickingKunCave (IOI13_cave)C++20
100 / 100
218 ms592 KiB
#include <bits/stdc++.h>
#include "cave.h"

using namespace std;

void exploreCave(int N) {
    int s[N], d[N], tries[N];
    memset(d, -1, sizeof d);
	
    for (int room = 0; room < N; room++) {
		vector <int> consi;
		for (int i = 0; i < N; i++)
			if (d[i] == -1) consi.emplace_back(i);
		
		for (int i = 0; i < N; i++) {
			if (d[i] != -1) tries[i] = s[i];
			else tries[i] = 0;
		}
		
		int ask = tryCombination(tries); int state = -1;
		if (ask == -1 || ask > room) state = 0;
		else state = 1; 
		
		int low = 0, high = consi.size() - 1, pos = -1;
		while (low <= high) {
			int mid = (low + high) >> 1;
			for (int i = 0; i <= mid; i++) tries[consi[i]] = state;
			for (int i = mid + 1; i < consi.size(); i++) tries[consi[i]] = state ^ 1;
			int ask = tryCombination(tries);
			if (ask == -1 || ask > room) high = (pos = mid) - 1;
			else low = mid + 1;
		}
		
		int mySwitch = consi[pos];
		d[mySwitch] = room; 
		s[mySwitch] = state;
	}
	
	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...