Cod sursa(job #567889)

Utilizator biroBiro Alexandru biro Data 30 martie 2011 16:17:10
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<algorithm>
#define DIM 21

using namespace std ;

int cad1(int k,int x,int y) {
  if(x<=(1<<(k-1))) {
    if(y<=(1<<(k-1)))
      return 1;
  }
  return 0;
}
int cad2(int k,int x,int y) {
  if(x<=(1<<(k-1))) {
    if(y>(1<<(k-1)))
      return 1;
  }
  return 0;
}
int cad3(int k,int x,int y) {
  if(x>(1<<(k-1))) {
    if(y>(1<<(k-1)))
      return 1;
  }
  return 0;
}
int cad4(int k,int x,int y) {
  if(x>(1<<(k-1))) {
    if(y<=(1<<(k-1)))
      return 1;
  }
  return 0;
}

int f(int k,int x,int y) {
  if(k==0)
    return 1;
  if(cad1(k,x,y)) {
    return f(k-1,y,x);
  }
  if(cad2(k,x,y)) {
    return (1<<(k-1))*(1<<(k-1))+f(k-1,x,y-(1<<(k-1)));
  }
  if(cad3(k,x,y)) {
    return (1<<(k-1))*(1<<(k-1))*2+f(k-1,x-(1<<(k-1)),y-(1<<(k-1)));
  }
  if(cad4(k,x,y)) {
    return 3*(1<<(k-1))*(1<<(k-1))+f(k-1,(1<<(k-1))-y+1,((1<<k)-x+1));
  }
}

int main()
{
  freopen("fractal.in","r",stdin);
  freopen("fractal.out","w",stdout);
  
  int k , x , y , rez;
  scanf("%d%d%d",&k,&x,&y);

  rez=f(k,x,y);
  printf("%d\n",rez-1);
  
  return 0 ;
}