Cod sursa(job #176216)

Utilizator c_sebiSebastian Crisan c_sebi Data 10 aprilie 2008 21:02:51
Problema Fractal Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <fstream.h>

int A(int, int, int);
int B(int, int, int);
int C(int, int, int);
int D(int, int, int);

int A(int n, int col, int lin){
	if(n){
	int c;
	if(col <= n/2)
		if(lin <= n/2) c = 1;
		else c = 2;
	else
		if(lin<=n/2) c = 4;
		else c = 3;

	if(c==1) return B(n/2, col, lin);
	if(c==2) return n*n/4 + A(n/2, col, lin-n/2);
	if(c==3) return n*n/2 + A(n/2, col-n/2, lin-n/2);
	if(c==4) return 3*n*n/4 + C(n/2, col-n/2, lin);
}
}

int B(int n, int col, int lin){
	if(n){
	int c;
	if(col <= n/2)
		if(lin <= n/2) c = 1;
		else c = 4;
	else
		if(lin<=n/2) c = 2;
		else c = 3;

	if(c==1) return A(n/2, col, lin);
	if(c==2) return n*n/4 + B(n/2, col-n/2, lin);
	if(c==3) return n*n/2 + B(n/2, col-n/2, lin-n/2);
	if(c==4) return 3*n*n/4 + D(n/2, col, lin-n/2);
}
}

int C(int n, int col, int lin){
	if(n){
	int c;
	if(col <= n/2)
		if(lin <= n/2) c = 3;
		else c = 2;
	else
		if(lin<=n/2) c = 4;
		else c = 1;

	if(c==1) return D(n/2, col-n/2, lin-n/2);
	if(c==2) return n*n/4 + C(n/2, col, lin-n/2);
	if(c==3) return n*n/2 + C(n/2, col, lin);
	if(c==4) return 3*n*n/4 + A(n/2, col-n/2, lin);
}
}
int D(int n, int col, int lin){
	if(n){
	int c;
	if(col <= n/2)
		if(lin <= n/2) c = 3;
		else c = 4;
	else
		if(lin<=n/2) c = 2;
		else c = 1;

	if(c==1) return C(n/2, col-n/2, lin-n/2);
	if(c==2) return n*n/4 + D(n/2, col-n/2, lin);
	if(c==3) return n*n/2 + D(n/2, col, lin);
	if(c==4) return 3*n*n/4 + C(n/2, col, lin-n/2);
}
}


int main(){
	int n, x, y;
	ifstream f("fractal.in");
	ofstream g("fractal.out");
	f>>n>>x>>y;
	f.close();
	g<<A(1<<n, x, y);
	g.close();
	return 0;
}