Cod sursa(job #59517)

Utilizator crawlerPuni Andrei Paul crawler Data 9 mai 2007 17:00:47
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <stdio.h>

#define pow(xx) (1<<(xx))

void swap(int &a,int &b)
 {
  int aux = a;
  a = b;
  b = aux;
 }

int cost(int i,int j,int k)
 {
  if(!k || (i==1 && j==1))
   return 0;
  int lim = 1<<(k-1);
  // stanga sus
  if(i<=lim && j<=lim)
   {
    swap(i,j);
    return cost(i,j,k-1);
   }
  // dreapta sus
  if(i<=lim && j>lim)
   {
    j -= lim;
    swap(i,j);
    i = lim - i + 1;
    j = lim - j + 1;
    return 3+3*(pow(2*k-2)-1)+cost(i,j,k-1);
   }
  // stanga jos
  if(i>lim && j<=lim)
   {
    i -= lim;
    return 1+(pow(2*k-2)-1)+cost(i,j,k-1);
   }
  //dreapta jos
  return 2+2*(pow(2*k-2)-1)+cost(i-lim,j-lim,k-1);
 }

int main()
 {
  freopen("fractal.in","r",stdin);
  freopen("fractal.out","w",stdout);

  int i,j,k;

  scanf("%d%d%d",&k,&j,&i);

  printf("%d\n",cost(i,j,k));

  return 0;
 }