Cod sursa(job #767321)

Utilizator cat_red20Vasile Ioana cat_red20 Data 13 iulie 2012 12:01:51
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<stdio.h>
FILE *fin,*fout;
int rez,x,y,k;

int calc_cadran(int x,int y,int l)
{
	if(y<=l/2 && x<=l/2)
		return 1;
	if(x<=l/2 && y>l/2)
		return 2;
	if(x>l/2 && y>l/2)
		return 3;
	return 4;
}

int pasi(int x,int y,int ord)
{
	if(ord==1)
	{
		if(x==1 && y==1)
			return 0;
		if(x==2 && y==1)
			return 3;
		if(x==1 && y==2)
			return 1;
		return 2;
	}
	
	int l=1<<ord;
	int c=calc_cadran(x,y,l);
	int x1,y1;
	if(c==1)
	{
		x1=y;
		y1=x;
	}
	else
	if(c==2)
	{
		x1=x;
		y1=y-l/2;
	}
	else
	if(c==3)
	{
		x1=x-l/2;
		y1=y-l/2;
	}
	else
	{
		x1=l/2-y+1;
		y1=l-x+1;
	}
	return l*l/4*(c-1)+pasi(x1,y1,ord-1);
}

int main()
{
	fin=fopen("fractal.in","r");
	fscanf(fin,"%d %d %d",&k,&x,&y);
	fclose(fin);
	fout=fopen("fractal.out","w");
	rez=pasi(x,y,k);
	fprintf(fout,"%d",rez);
	fclose(fout);
	return 0;
}