Cod sursa(job #96731)

Utilizator piroslPiros Lucian pirosl Data 3 noiembrie 2007 02:01:56
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>
#include <math.h>
using namespace std;

int Fractal(int ordin)
{
	if(ordin == 1)
		return 3;
	else
		return 4*Fractal(ordin - 1)+3;
}
int NrPasi(int ordin, int x, int y)
{
	if(ordin == 1)
	{
		if(x == 1 && y == 1)
			return 0;
		if(x == 1 && y == 2)
			return 1;
		if(x == 2 && y == 2)
			return 2;
		if(x == 2 && y == 1)
			return 3;
	}
	else 
	{
		if((x >= 1 && x <= pow(2.0,ordin-1)) && (y >= 1 && y <= pow(2.0, ordin-1)))
			return NrPasi(ordin-1, y, x);
		if((x >= 1 && x <= pow(2.0,ordin-1)) && (y > pow(2.0, ordin-1)))
			return Fractal(ordin-1) + 1 + NrPasi(ordin-1, x, y-(int)pow(2.0, ordin-1));
		if((x > pow(2.0, ordin-1)) && (y > pow(2.0, ordin-1)))
			return 2*Fractal(ordin-1) + 2 + NrPasi(ordin-1, x-(int)pow(2.0, ordin-1), y-(int)pow(2.0, ordin-1));
		if((x > pow(2.0, ordin-1)) && (y >= 1 && y <= pow(2.0, ordin-1)))
			return 3*Fractal(ordin-1) + 3 + NrPasi(ordin-1, (int)pow(2.0, ordin-1) - y + 1,(int)pow(2.0, ordin-1) - ( x-(int)pow(2.0, ordin-1))+1);
	}
}

int main(void)
{
	ifstream in;
	ofstream out;
	in.open("fractal.in");
	out.open("fractal.out");
	int k, x,y;
	in >> k >> x >> y;
	in.close();
	int n = NrPasi(k , x, y);
	out << n << endl;
	out.close();
	return 0;
}