Cod sursa(job #1842388)

Utilizator demetriad-dagpagDavid Demetriad demetriad-dagpag Data 6 ianuarie 2017 21:31:16
Problema Fractal Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <stdio.h>
#include <stdlib.h>
int v[5]={0,1,3,4,2};
int main()
{
    int k,x,y,aux,xst,xdr,rez,xmid,ymid,ydr,pos,yst,i,b1,b2,b3,b4;
    freopen("fractal.in","r",stdin);
    freopen("fractal.out","w",stdout);
    scanf("%d%d%d",&k,&x,&y);
    aux=x;
    x=y;
    y=aux;
    xst=1;
    xdr=1<<k;
    yst=1;
    ydr=1<<k;
    rez=0;
    while(k>0)
    {
        xmid=(xst+xdr)/2;
        ymid=(yst+ydr)/2;
        pos=0;
        if(x>xmid && y>ymid)
            pos=4,xst=xmid+1,yst=ymid+1;
        else
            if(x>xmid && y<=ymid)
                pos=3,xst=xmid+1,ydr=ymid;
            else
                if(x<=xmid && y>ymid)
                    pos=2,xdr=xmid,yst=ymid+1;
                else
                    pos=1,xdr=xmid,ydr=ymid;
        for(i=1; i<=4 && v[i]!=pos; i++);
        rez+=(1<<(k-1))*(1<<(k-1))*(i-1);
        switch(i)
        {
            case 4: b1=v[3]; b2=v[2]; b3=v[1]; b4=v[4];
                    v[1]=b1; v[2]=b2; v[3]=b3; v[4]=b4;
                    break;
            case 1: b1=v[1]; b2=v[4]; b3=v[3]; b4=v[2];
                    v[1]=b1; v[2]=b2; v[3]=b3; v[4]=b4;
                    break;
            default: break;
        }
        k--;
    }
    printf("%d\n",rez);

    return 0;
}