Cod sursa(job #365467)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 18 noiembrie 2009 20:40:51
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<stdio.h>
int n,x,y;

int rec(int k, int x, int y, int lat)
{
	if(x==1 && y==1)
		return 0;
	if(x<=(1<<(k-1)) && y<=(1<<(k-1)))
		return rec(k-1,y,x,lat/4);
	if(y<=(1<<(k-1)))
		return lat/4+rec(k-1,x-(1<<(k-1)),y,lat/4);
	if(x>(1<<(k-1)) && y>(1<<(k-1)))
		return lat/2+rec(k-1,x-(1<<(k-1)),y-(1<<(k-1)),lat/4);
	y=y-(1<<(k-1));
	return lat/4*3+rec(k-1,(1<<(k-1))-y+1,(1<<(k-1))-x+1,lat/4);
}

int main()
{
	freopen("fractal.in","r",stdin);
	freopen("fractal.out","w",stdout);
	scanf("%d%d%d",&n,&y,&x);
	printf("%d\n",rec(n,x,y,1<<2*n));
	return 0;
}
/*	if(k<n)
	{
		int cx;
		cx=y;
		y=lat/4-x+1;
		x=cx;
	}
	if(x<=(1<<(k-1)) && y<=(1<<(k-1)))
		return rec(k-1,x,y,lat/4);
	if(y<=(1<<(k-1)))
		return (lat/4)+rec(k-1,y,x-(1<<(k-1)),lat/4);
	if(x>(1<<(k-1)) && y>(1<<(k-1)))
		return (3*lat/4)+rec(k-1,y-(1<<(k-1)),x-(1<<(k-1)),lat/4);
	return (3*lat/4)+rec(k-1,(1<<(k-1))-x+1,(1<<k)-y+1,lat/4);*/