Cod sursa(job #1032895)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 16 noiembrie 2013 10:40:02
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
using namespace std;
int K, X, Y, sol;
// cadranele le numerotez asa
// 1 4
// 2 3

int main()
{
	ifstream fin("fractal.in");
	fin >> K >> X >> Y;
	fin.close();
	
	while(K > 1)
	{
		if(X <= (1 << (K - 1)))
		{
			if(Y <= (1 << (K - 1)))
			{
				// cadranul 1 - trebui sa rotesc spre dreapta
				swap(X, Y);
			}
			else
			{
				// cadranul 2
				Y -= (1 << (K - 1));
				sol += (1 << (K - 1)) * (1 << (K - 1));
			}
		}
		else
		{
			if(Y <= (1 << (K - 1)))
			{
				// cadranul 4 - trebuie sa rotesc spre stanga
				X = 2 * (1 << (K - 1)) - X + 1;
				Y = (1 << (K - 1)) - Y + 1;
				swap(X, Y);
				sol += 3 * (1 << (K - 1)) * (1 << (K - 1));
			}
			else
			{
				// cadranul 3
				X -= (1 << (K - 1));
				Y -= (1 << (K - 1));
				sol += 2 * (1 << (K - 1)) * (1 << (K - 1));
			}
		}
		K--;
	}
	if(X == 1 && Y == 2)
		sol++;
	if(X == 2 && Y == 2)
		sol += 2;
	if(X == 2 && Y == 1)
		sol += 3;
	
	ofstream fout("fractal.out");
	fout << sol << "\n";
	fout.close();
	return 0;
}