Cod sursa(job #2037045)

Utilizator calin1Serban Calin calin1 Data 11 octombrie 2017 17:19:37
Problema Fractal Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <cstdio>
#include <algorithm>

using namespace std;

int x, y, k;

int cadran(int k, int x, int y)
{
	int putere_2 = 1 << (k - 1);
	
	if(x <= putere_2 && y <= putere_2)
	{
		return 1;
	}
	
	if(x <= putere_2 && y > putere_2)
	{
		return 2;
	}
	
	if(x > putere_2 && y > putere_2)
	{
		return 3;
	}
	
	if(x > putere_2 && y <= putere_2)
	{
		return 4;
	}
}

void coord(int cadran, int k, int &x, int &y)
{
	if(cadran == 1)
	{
		swap(x,y);
		
		return;
	}
	
	if(cadran == 2)
	{
		y = y - (1 << (k - 1));
		
		return;
	}
	
	if(cadran == 3)
	{
		x = x - (1 << (k - 1));
		
		y = y - (1 << (k - 1));
		
		return;
	}
	
	int tmp_x = x;
	
	x = (1 << k) - y + 1;
	
	y = (1 << k) - tmp_x + 1;
	

}

int recursiva(int k, int x, int y)
{
	if(k == 0)
	{
		return 0;
	}
	int c = cadran(k, x, y);
	
	int x1 = x, y1 = y;
	
	coord(c, k, x1, y1);
	
	int cost = (c - 1) * (1 << (2 * (k - 1)));
	
	return recursiva(k - 1, x1, y1) + cost;
}

void citire()
{
	scanf("%d %d %d", &k, &x, &y);
	
	printf("%d ", recursiva(k,x,y));
	
	printf("\n");
}

int main()
{
	freopen("fractal.in", "r", stdin);
	freopen("fractal.out", "w", stdout);
	
	citire();
}