제출 #222902

#제출 시각아이디문제언어결과실행 시간메모리
222902kshitij_sodani동굴 (IOI13_cave)C++17
100 / 100
1024 ms920 KiB
#include<iostream>
#include <bits/stdc++.h>
using namespace std;
#define a first
#define b second
#define pb push_back
#include "cave.h"
vector<int> kk;
int ans[5001];
int nn;
/*void answer(vector<int> x,vector<int> y){
	for(int i=0;i<nn;i++){
		cout<<x[i]<<",";
	}
	for(int i=0;i<nn;i++){
		cout<<y[i]<<",";
	}
}
int tryCombination(vector<int> x){
	for(int i=0;i<nn;i++){
		cout<<x[i]<<":";
	}

	int yy;
	cin>>yy;
	return yy;
}
*/

int find(int l,int r,int val,int mi){
//	cout<<l<<" "<<r<<endl;
	if(l==r){
		return kk[l];
	}
	int mid=(l+r)/2;
/*	for(int i=0;i<nn;i++){
		cout<<kk[i]<<",";
	}
	cout<<endl;*/
	int ans3[nn];
	for(int i=0;i<nn;i++){
		if(ans[i]!=-1){
			ans3[i]=ans[i];
			continue;
		}
		if(i<kk[l] or i>kk[mid]){
			ans3[i]=1-val;
		}
		else{
			ans3[i]=val;
		}
	}
	int tt=tryCombination(ans3);
	if(tt==-1 or tt>mi){
		return find(l,mid,val,mi);
	}
	else{
		return find(mid+1,r,val,mi);
	}
}
void exploreCave(int n){
	nn=n;
	for(int i=0;i<n;i++){
		ans[i]=-1;
	}
	int stat[n];
	for(int i=0;i<n;i++){
		int ans2[n];
		for(int j=0;j<n;j++){
			if(ans[j]==-1){
				ans2[j]=0;
			}
			else{
				ans2[j]=ans[j];
			}
		}
		int tt=tryCombination(ans2);
		int ss=1;

		if(tt==-1 or tt>i){
			ss=0;
		}
		kk.clear();
		for(int i=0;i<n;i++){
			if(ans[i]==-1){
				kk.pb(i);
			}
		}

		int ind=find(0,kk.size()-1,ss,i);
		stat[ind]=i;
		ans[ind]=ss;
	}
	int fin[n];
	for(int i=0;i<n;i++){
		fin[i]=ans[i];
	}
	answer(fin,stat);

}
/*int main(){

	exploreCave(4);

	return 0;
}

*/


#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...