Cod sursa(job #492870)

Utilizator hadesgamesTache Alexandru hadesgames Data 16 octombrie 2010 11:14:11
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <cstdio>
FILE *in,*out;
const int cost[2][2]={{0,3},{1,2}};
void rot_stanga(int k,int &x,int &y)
{
	int aux=(1<<k)-y+1;
	y=x;
	x=aux;
	y=(1<<k)-y+1;
}
void rot_dreapta(int k,int &x,int &y)
{
	int aux=(1<<k)-x+1;
	x=y;
	y=aux;
	y=(1<<k)-y+1;
}
int search(int k,int x,int y)
{
	if (k==0)
		return 1;
	int q=(1<<(k-1)),x2,y2;
	x2=x<=q?0:1;
	y2=y<=q?0:1;
	x-=x2*q;
	y-=y2*q;
	if (cost[x2][y2]==0)
		rot_dreapta(k-1,x,y);
	if (cost[x2][y2]==3)
		rot_stanga(k-1,x,y);
	return search(k-1,x,y)+cost[x2][y2]*q*q;
}
int main()
{
	int k,x,y;
	in=fopen("fractal.in","r");
	out=fopen("fractal.out","w");
	fscanf(in,"%d%d%d",&k,&x,&y);
	fprintf(out,"%d\n",search(k,y,x)-1);
	fclose(in);
	fclose(out);
	return 0;
}