Submission #164370

#TimeUsernameProblemLanguageResultExecution timeMemory
164370cfalasCave (IOI13_cave)C++14
100 / 100
948 ms736 KiB
#include<bits/stdc++.h>
using namespace std;
#include "cave.h"
#define pr(x) cout<<#x<<" "<<x<<endl;


void exploreCave(int n) {
	int used[n]={}, correct[n] = {};
	int aa[n];
	for(int i=0;i<n;i++){
		// Find correct position of switch
		int curr[n];
		for(int j=0;j<n;j++){
			if(used[j]) curr[j] = correct[j];
			else curr[j] = 1;
			//cout<<curr[j]<<" ";
		}
		//cout<<endl;
		int ans = tryCombination(curr);
		int correctVal = 1;
		//cout<<ans<<endl;
		if(ans<=i && ans!=-1) correctVal = 0;
		
		//pr(correctVal);

		// Find switch needed
		int l=0, r=n-1;
		int m;
		while(l<=r){
			m = (l+r)/2;
			//cout<<m<<": ";
			for(int j=0;j<=m;j++){
				if(used[j]) curr[j] = correct[j];
				else curr[j] = correctVal;
				//cout<<curr[j]<<" ";
			}
			for(int j=m+1;j<n;j++){
				if(used[j]) curr[j] = correct[j];
				else curr[j] = 1 - correctVal;
				//cout<<curr[j]<<" ";
			}
			//cout<<endl;
			ans = tryCombination(curr);
			if(ans>i || ans==-1){
				r = m-1;
			}
			else m++, l = m;
		}
		used[m] = true;
		correct[m] = correctVal;
		aa[m] = i;
		//pr(m);
		//cout<<"--------------------\n";
	}
		answer(correct, aa);
}
#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...