Cod sursa(job #685679)

Utilizator mika17Mihai Alex Ionescu mika17 Data 21 februarie 2012 08:56:27
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>

int getResult(int,int,int);
int main()
{
	int K,x,y;
	std::ifstream("fractal.in") >> K >> x >> y;
	std::ofstream("fractal.out") << getResult(K,y,x);
	return 0;
}

inline int pow2(int K) { return 1 << K ; }
int getResult(int K,int l,int c)
{
	if(K == 0)
		return 0;
	else
	{
		if( l >= 1 && l <= pow2(K - 1) && c >=1 && c <= pow2(K - 1) ) //stanga sus,simetrie diag princ
			return 0 + getResult(K - 1,c,l);

		if( l > pow2(K - 1) && l <= pow2(K) && c > pow2(K - 1) && c <= pow2(K) ) //dreapta jos
			return 2 + 2 * (pow2(K - 1)*pow2(K - 1) - 1) + getResult(K - 1,l - pow2(K - 1), c - pow2(K - 1) );

		if( l >= 1 && l <= pow2(K - 1) && c > pow2(K - 1) && c <= pow2(K) ) //dreapta sus, simetrie diag sec
		{
			int _l = l, _c = c - pow2(K - 1);
			return 3 + 3 * (pow2(K - 1)*pow2(K - 1) - 1) + getResult(K - 1, pow2(K - 1) - _c + 1,pow2(K - 1) - _l + 1);
		}
		if( l > pow2(K - 1) && l <= pow2(K) && c >=1 && c <= pow2(K - 1) ) //stanga jos
			return 1 + pow2(K - 1)*pow2(K - 1) - 1 + getResult(K - 1,l - pow2(K - 1),c);
		return 0;
	}
}