Cod sursa(job #674642)

Utilizator MKLOLDragos Ristache MKLOL Data 6 februarie 2012 16:30:12
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<stdio.h>
int m[20][20];
int C1(int k,int x,int y)
{
    if(x<=(1<<(k-1)))
        if(y<=(1<<(k-1)))
        return 1;

        return 0;
}
int C2(int k,int x,int y)
{
    if(x<=(1<<(k-1)))
        if(y>(1<<(k-1)))
        return 1;
        return 0;
}
int C3(int k,int x,int y)
{
    if(x>(1<<(k-1)))
        if(y>(1<<(k-1)))
        return 1;

        return 0;
}
int C4(int k,int x,int y)
{
    if(x>(1<<(k-1)))
        if(y<=(1<<(k-1)))
            return 1;

        return 0;
}

int frac(int k,int x,int y)
{
 //   printf("%d %d %d\n",x,y,k);
    if(k==0)
        return 1;
    if(C1(k,x,y))
    {
   //     printf("1\n");
        return frac(k-1,y,x);
    }
    if(C2(k,x,y))
    {
   //     printf("2\n");
        return (1<<(k-1))*(1<<(k-1))+frac(k-1,x,y-(1<<(k-1)));
    }
    if(C3(k,x,y))
    {
  //  printf("3\n");
    return (1<<(k-1))*(1<<(k-1))*2+frac(k-1,x-(1<<(k-1)),y-(1<<(k-1)));
    }
    if(C4(k,x,y))
     {
       // printf("4\n");

        return 3*(1<<(k-1))*(1<<(k-1))+frac(k-1,(1<<(k-1))-y+1,((1<<k)-x+1));
     }





}



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


    rez=frac(K,x,y);
    printf("%d\n",rez-1);
}