제출 #950893

#제출 시각아이디문제언어결과실행 시간메모리
950893Doncho_BonbonchoCave (IOI13_cave)C++14
100 / 100
998 ms2128 KiB
#include <bits/stdc++.h>
#include "cave.h"
using namespace std;

#define out( x ) #x << " = " << x << "  "
#ifndef LOCAL
#define cerr if(false) cerr
#endif


std::vector< int > nas;
std::vector< int > dor;
int n;

void makeComb( std::vector< int >& v, int l, int r, int fill ){
	for( int i=0 ; i < n ; i++ ){
		if( nas[i] != -1 ) v[i] = nas[i];
		else if( i >= l and i <= r ) v[i] = fill;
		else v[i] = ( 1 - fill );
	}
}

void f( int l, int r, int x, int sw ){

	cerr << out( l ) << out( r ) << out( x ) << out( sw ) << endl;
	
	std::vector< int > currSw( n );
	if( l == r ){
		nas[l] = sw; // na poz l e switcha e sw
		dor[l] = x;	 // na poz l e vratata e x
		return;
	}

	int m = ( l + r ) >> 1;

	makeComb( currSw, l, m, sw );

	int q = tryCombination( currSw.data() );
	for( auto j : currSw ) cerr << j << " ";
	cerr << endl;
	cerr << out( q ) << endl;
	if( q == x ){ // ne sam go ocelil v ( l, m )
		l = m +1;
	}else{
		r = m;
	}

	f( l, r, x, sw );
}

void exploreCave( int N ) {

	n = N;

	std::vector< int > currSw( n );
	std::vector< int > order( n );

	nas.resize( n );
	dor.resize( n );
	for( int i=0 ; i < n; i ++ ) nas[i] = -1;

	for( int i = 0 ; i < n ; i++ ){ // koj 6te tarsim v momenta

		makeComb( currSw, 0, n-1, 0 );
		int curr = 0;
		int q = tryCombination( currSw.data() );

		cerr << out( i ) << std::endl;
		for( auto j : currSw ) cerr << j << " ";
		cerr << out( q ) << endl;

		if( q != i ){// itata e otvorena -> curr = 0;
			curr = 0;
		}else curr = 1;

		cerr << out( curr ) << endl;
		f( 0, n-1, i, curr );
	}

	cerr << " ======== " << endl;
	for( auto j : nas ) cerr << j << " ";
	cerr << std::endl;
	for( auto j : dor ) cerr << j << " ";
	cerr << std::endl << std::endl;


	answer( nas.data(), dor.data() );

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