Submission #928751

#TimeUsernameProblemLanguageResultExecution timeMemory
928751JuanchokiCave (IOI13_cave)C++14
100 / 100
361 ms604 KiB
#include"cave.h"
#include <bits/stdc++.h>
using namespace std;
/*
int S[1<<20], D[1<<20];
int N; 
int tryCombination(int comb[])
{
	int mini = 1<<20;
	for (int i = 0; i < N; i++)
		if (S[i] != comb[i]) 	
			mini = min (mini, D[i]);
	if (mini == 1<<20) mini = -1;
	return mini;
}
void answer (int arr[], int otro[])
{
	for (int i = 0; i < N; i++)
		if (arr[i] != S[i])
		{
			cout << "WA";
			return;
		}
	for (int i = 0; i < N; i++)
		if (otro[i] != D[i])
		{
			cout << "WA";
			return;
		}
	cout << "AC";
}
void imprime (int arr[])
{
	for (int i = 0; i < N; i++)
		cout << arr[i] << " ";
	cout << '\n';
}
*/

void llena (int l, int r, int val, int arr[], bool visi[])
{
	for (int i = l; i <= r; i++)
	{
		if (visi[i]) continue;
		arr[i] = val;
	}
}

void exploreCave(int N)
{
	int arr[N];
	int otro[N];
	bool visi[N];

	for (int i = 0; i < N; i++)
	{
		arr[i] = 0;
		visi[i] = 0;
	}
		
		
	int last = 0;
	while (last < N)
	{
		llena(0, N-1, 0, arr, visi);
		int temp = tryCombination(arr); //puros ceros xd
		int necesita = 0;
		if (temp == last) necesita = 1;
		int opuesto = 0; if (necesita == 0) opuesto = 1; 

		int l = 0, r = N;
		while (l < r)
		{
			int mit = (l+r)>>1;
			llena(l, mit, necesita, arr, visi);
			llena(mit+1, r, opuesto, arr, visi);
			temp = tryCombination(arr);

			if (temp == last) // no esta del lado izquierdo
			{
				llena(l, mit, opuesto, arr, visi);
				llena(mit+1, r, necesita, arr, visi);
				l = mit+1;
				continue;
			}
			//esta del lado izquierdo
			r = mit;
		}
		otro[l] = last;
		visi[l] = 1;
		arr[l] = necesita;
		last++;
	}

	//imprime(arr);
	//imprime(otro);
	answer(arr, otro);
}
#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...