Cod sursa(job #568505)

Utilizator rootsroots1 roots Data 31 martie 2011 12:43:12
Problema Fractal Scor 60
Compilator cpp Status done
Runda 103 Marime 1.43 kb
#include <stdio.h>

int c1,c2,c3,c4;
int sol;

void crack(int K,int x,int y,int w)
{
	int L,M,R,aux;

	if(K>0)
	{
		L=1;
		M=1<<(K-1);
		R=1<<K;

		if(L<=x&&x<=M)
		{
			if(L<=y&&y<=M)
			{
				sol+=c1*M*M;
				if(w==2)
				{
					aux=c2;
					c2=c4;
					c4=aux;
				}
				else
				if(w==3)
				{
					aux=c1;
					c1=c3;
					c3=aux;
					aux=c2;
					c2=c4;
					c4=aux;
				}
				crack(K-1,x,y,1);
			}
			else
			if(M+1<=y&&y<=R)
			{
				sol+=c2*M*M;
				if(w==1)
				{
					aux=c1;
					c1=c3;
					c3=aux;
					aux=c2;
					c2=c4;
					c4=aux;
				}
				else
				if(w==2)
				{
					aux=c1;
					c1=c3;
					c3=aux;
				}
				crack(K-1,x,y-M,3);
			}
		}
		else
		if(M+1<=x&&x<=R)
		{
			if(L<=y&&y<=M)
			{
				sol+=c4*M*M;
				if(w==3)
				{
					aux=c2;
					c2=c4;
					c4=aux;
				}
				else
				if(w==1)
				{
					aux=c1;
					c1=c3;
					c3=aux;
				}
				crack(K-1,x-M,y,2);
			}
			else
			if(M+1<=y&&y<=R)
			{
				sol+=c3*M*M;
				if(w==3)
				{
					aux=c2;
					c2=c4;
					c4=aux;
				}
				else
				if(w==1)
				{
					aux=c1;
					c1=c3;
					c3=aux;
				}
				crack(K-1,x-M,y-M,2);
			}
		}
	}
}

int main()
{
	int K,x,y;

	freopen("fractal.in","r",stdin);

	scanf("%d%d%d",&K,&x,&y);

	sol=0;

	c1=0;
	c2=3;
	c3=2;
	c4=1;
	crack(K,y,x,2);

	freopen("fractal.out","w",stdout);

	printf("%d\n",sol);

	return 0;
}