Submission #216216

#TimeUsernameProblemLanguageResultExecution timeMemory
216216MODDICave (IOI13_cave)C++14
100 / 100
549 ms632 KiB
#include "cave.h"
#include <bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
#define pll pair<ll, ll>
#define vi vector<int>
#define vl vector<ll>
#define vll vector<pll>
#define vii vector<pii>
using namespace std;
 
void exploreCave(int n){
	int door[n], guess[n], status[n];
	memset(status,0,sizeof(status));
	memset(guess,0,sizeof(guess));
	memset(door,-1,sizeof(door));
	for(int i = 0; i < n; i++){
		int before_swap = tryCombination(status);
		int l = 0, r = n - 1;
		while(l != r){
			bool ok = false;
			int mid = (r + l) / 2;
			for(int j = 0; j < n; j++){
				if(j >= l && j <= mid){
					if(door[j] != -1)
						guess[j] = status[j];
					else{
						guess[j] = !status[j];
						ok = true;
					}
				}
				else
					guess[j] = status[j];
			}
			int K = before_swap;
			if(ok)
				K = tryCombination(guess);
				
			if(before_swap == i){
				if(K > i || K == -1)
					r = mid;
				else
					l = mid + 1;
			}
			else{
				if(K == i)
					r = mid;
				else
					l = mid + 1;
			}
		}
		door[l] = i;
		if(before_swap == i)
			status[l] = !status[l];
	}
	answer(status,door);
}
#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...