Cod sursa(job #497321)

Utilizator drywaterLazar Vlad drywater Data 2 noiembrie 2010 09:23:46
Problema Fractal Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <stdio.h>
FILE *f=fopen("fractal.in","r"),*g=fopen("fractal.out","w");
int b,a,n;
int sol(int k,int x,int y)
{
	int a=0,b=0,xn=0,yn=0,z=0;
	if (k==0) return 0;
	k--;
	if (x>(1<<k) && y>(1<<k)) z=2;
	if (x>(1<<k) && y<=(1<<k)) z=1;
	if (x<=(1<<k)&& y>(1<<k)) z=3;
	a=x%(1<<k);
	b=y%(1<<k);
	if (a==0) a=(1<<k);
	if (b==0) b=(1<<k);
	if (z==0) {xn=b; yn=a; a=xn; b=yn;}
	if (z==3) {xn=(1<<k)-b+1; yn=(1<<k)-a+1; x=xn; y=yn;}
	return z*(1<<k)*(1<<k)+sol(k,a,b);
}
	
int main(void)
{
	fscanf(f,"%d%d%d",&n,&a,&b);
	fprintf(g,"%d",sol(n,b,a));
	fclose(g);
	return 0;
}
/*#include<stdio.h>  
long n,x,y;  
long rec(long a,long b,long k)  
{long x=0,y=0,z=0,xn=0,yn=0;  
if (k==0)return 0;   
k--;   
if(a>(1<<k)&&b>(1<<k))z=2;   
if(a>(1<<k)&&b<=(1<<k))z=1;  
if(a<=(1<<k)&&b>(1<<k))z=3;   
x=a%(1<<k);   
y=b%(1<<k);   
if(x==0)x=(1<<k);   
if(y==0)y=(1<<k);   
if(z==0)xn=y,yn=x,x=xn,y=yn;   
if(z==3)yn=(1<<k)-x+1,xn=(1<<k)-y+1,x=xn,y=yn;  
return z*(1<<k)*(1<<k)+rec(x,y,k);  
} 
  
 
int main()  
{   
freopen("fractal.in","r",stdin);  
freopen("fractal.out","w",stdout);  
scanf("%ld%ld%ld",&n,&y,&x);  
printf("%ld\n",rec(x,y,n));  
return 0;  
}*/