Cod sursa(job #403594)

Utilizator Cristy94Buleandra Cristian Cristy94 Data 25 februarie 2010 09:20:27
Problema Fractal Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2 kb
#include<stdio.h>
FILE *f=fopen("fractal.in","r");
FILE *g=fopen("fractal.out","w");
long long k,x,y,nr,p[16],poz;
void divid(int a){
if(poz==1){
  //daca este in C1
  if(x<=p[a]/2&&y<=p[a]/2){
	    poz=2;
		return;
  }
  //daca este in C2
  if(x>p[a]/2&&y<=p[a]/2)
	{   nr+=p[2*(a-1)];
        x-=p[a]/2;
		poz=1;
		return;
	}
  //daca este in C3
  if(x>p[a]/2&&y>p[a]/2)
  { nr+=2*p[2*(a-1)];
    x-=p[a]/2;
	y-=p[a]/2;
	poz=1;
	return;
  }
  //daca este in C4
  if(x<=p[a]/2&&y>p[a]/2)
  { nr+=3*p[2*(a-1)];
    y-=p[a]/2;
	poz=3;
	return;
  }
}
else if(poz==2){
  //daca este in C1
  if(x<=p[a]/2&&y<=p[a]/2){
	    poz=2;
		return;
  }
  //daca este in C2
  if(x<=p[a]/2&&y>p[a]/2) 
	{   nr+=p[2*(a-1)];
        x-=p[a]/2;
		poz=1;
		return;
	}
  //daca este in C3
  if(x>p[a]/2&&y>p[a]/2)
  { nr+=2*p[2*(a-1)];
    x-=p[a]/2;
	y-=p[a]/2;
	poz=1;
	return;
  }
  //daca este in C4
  if(x>p[a]/2&&y<=p[a]/2)
  { nr+=3*p[2*(a-1)];
    x-=p[a]/2;
	poz=3;
	return;
  }
}
else if(poz==3){
  //daca este in C1
  if(x<=p[a]/2&&y>p[a]/2){
	    poz=2;
		 return;
  }
  //daca este in C2
 if(x>p[a]/2&&y>p[a]/2)
	{   nr+=p[2*(a-1)];
        x-=p[a]/2;
		poz=1;
		 return;
	}
  //daca este in C3
   if(x>p[a]/2&&y<=p[a]/2)
  { nr+=2*p[2*(a-1)];
    x-=p[a]/2;
	y-=p[a]/2;
	poz=1;
	 return;
  }
  //daca este in C4
  if(x<=p[a]/2&&y<=p[a]/2)
  { nr+=3*p[2*(a-1)];
    y-=p[a]/2;
	poz=3;
	 return;
  }
}
}
int main(){
	p[0]=1;
fscanf(f,"%lld%lld%lld",&k,&y,&x);
nr=0; poz=1;
for(int i=1;i<=k;i++)
	   p[i]=p[i-1]*2; //ridicam 2 la puterea k
while(k>1){
	divid(k);
	k--;	
}
if(poz==1){
	if(x==2&&y==1)
		nr++;
	else if(x=2&&y==2)
		  nr=nr+2;
else if(x==1&&y==2)
	    nr=nr+3;
}
else if(poz==2){
	if(x==1&&y==1)
		nr+=3;
	else if(x=1&&y==2)
		  nr+=2;
else if(x==2&&y==2)
	    nr+=1;
}
else if(poz==3){
	if(x==1&&y==1)
		nr+=2;
	else if(x=1&&y==2)
		  nr+=3;
else if(x==2&&y==1)
	    nr+=1;
}
fprintf(g,"%lld",nr);
return 0;
}