Cod sursa(job #504769)

Utilizator mika17Mihai Alex Ionescu mika17 Data 28 noiembrie 2010 16:58:15
Problema Fractal Scor 80
Compilator c Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>
typedef int usi;

int get(usi order,usi row,usi column) {

	if(!order)
		return 0;
	else {
		
		usi tmp = 1<<(order - 1); //1,1 -> 2,1 -> 2,2 -> 1,2
		//printf("%d %d %d\n",row,column,tmp);
		if(row <= tmp && column <= tmp) //cadranul 1
			return get(order - 1,column,row); //rotesc diag1
		else if(column <= tmp) //cadranul 2
			return 1*(tmp*tmp - 1) + 1 + get(order - 1,row-tmp,column);
		else if(row <= tmp) //cadranul 4
			if(row + column - tmp != tmp + 1)
				return 3*(tmp*tmp - 1) + 1 + 1 + 1 + get(order - 1,(tmp+1)-row,(tmp+1)-(column - tmp)); //rotesc diag2
			else 
				return 3*(tmp*tmp - 1) + 1 + 1 + 1 + get(order - 1,row,(column - tmp));
		else //cadranul 3
			return 2*(tmp * tmp - 1) + 1 + 1 + get(order - 1,row - tmp,column - tmp);
	}
}


int main() {

	usi
	K,
	X,
	Y;
	FILE
	*fin = fopen("fractal.in","r"),
	*fout = fopen("fractal.out","w");
	
	fscanf(fin,"%d%d%d",&K,&X,&Y);
	fprintf(fout,"%d",get(K,Y,X));
	fclose(fin);
	fclose(fout);
	
	return 0;
}