Cod sursa(job #1247414)

Utilizator danny794Dan Danaila danny794 Data 22 octombrie 2014 19:29:33
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <cstdio>

using namespace std;

int K, x, y;

void read()
{
	freopen("fractal.in", "r", stdin);
	freopen("fractal.out", "w", stdout);
	scanf("%d %d %d", &K, &x, &y);
}

int solve(int a ,int b, int L)
{
	int s = 0;
	while(L > 1)
	{
		int l =  L - 1, c = 1 << (2*l), half = 1 << l, aux;
		if(a <= half)
		{
			if(b <= half)
			{
				aux = b;
				b = a;
				a = aux;
			}
			else
			{
				b -= half;
				s += c;
			}
		}
		else
		{
			if(b <= half)
			{
				aux = b;
				b = 2 * half - a + 1;
				a = half - aux + 1;
				s += (3*c);
			}
			else
			{
				b -= half;
				a -= half ;
				s += (2*c);
			}
		}

		L--;
	}

	if(a == 1)
	{
		if(b == 1)
			return s;
		return s + 1;
	}
	else
	{
		if(b == 1)
			return s + 3;
		return s + 2;
	}
}

int main() {
	read();
	printf("%d", solve(x, y, K));
	return 0;
}