Cod sursa(job #678121)

Utilizator Cosmin1490Balan Radu Cosmin Cosmin1490 Data 11 februarie 2012 01:47:54
Problema Fractal Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
using namespace std;

const char* infile = "fractal.in";
const char* outfile = "fractal.out";

int GetCadran(int K, int X, int Y)
{
	if( X <= (1 << (K - 1) ) )
	{
		if (Y <= (1 << (K - 1) ))
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}
	else
	{
		if (Y <= (1 << (K - 1) ))
		{
			return 4;
		}
		else
		{
			return 3;
		}
	}
}

int Solve( int K, int X, int Y ) 
{

	int cadran = GetCadran(K, X, Y) ;

	if(K == 1)
	{
		return cadran - 1;
	}

	int cost = (cadran - 1 ) * (1 << (K -1) ) * (1 << (K-1) );
	
	switch(cadran)
	{
	case 1:
		return cost + Solve(K-1, Y, X);
		break;
	case 2:
		return cost + Solve(K-1, X, Y - (1 << (K -1) ) );
		break;
	case 3:
		return cost + Solve(K-1, X - (1 << (K -1) ), Y - (1 << (K -1) ));
		break;
	case 4:
		return cost + Solve(K-1, X - (1 << (K -1) ) , Y);
		break;
	}

	return 0;
}

int main()
{
	int K;
	int X;
	int Y;

	fstream fin(infile, ios::in);

	fin >> K >> X >> Y;

	fin.close();

	fstream fout(outfile, ios::out);
	fout << Solve(K, X, Y) << "\n";

	fout.close();

}