Cod sursa(job #2343689)

Utilizator Anakin1001George Giorgiu Gica Anakin1001 Data 14 februarie 2019 10:47:13
Problema Fractal Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>

using namespace std;
ifstream f("fractal.in");
ofstream g("fractal.out");
int nr,l,k,x,y,n,d[5],dx,dy;
void init(int p){
    if(p==3||p==4){
        d[1]=0;
        d[2]=3;
        d[3]=1;
        d[4]=2;
    }
    else if(p==1){
        d[1]=0;
        d[2]=1;
        d[3]=3;
        d[4]=2;
    }
    else if(p==2){
        d[1]=2;
        d[2]=3;
        d[3]=1;
        d[4]=0;
    }
}
void hilbert(int l){
    if(k>1){
        if(dx<=l/2 && dy<=l/2){
            nr+=d[1]*l;
            init(1);
        }
        else if(dx>l/2 && dy<=l/2){
            nr+=d[2]*l;
            dx-=l/2;
            init(2);
        }
        else if(dx<=l/2 && dy>l/2){
            nr+=d[3]*l;
            dy-=l/2;
            init(3);
        }
        else if(dx>l/2 && dy>l/2){
            nr+=d[4]*l;
            dx-=l/2;
            dy-=l/2;
            init(4);
        }
        k--;
        hilbert(l/2);
    }
}
int main()
{   f>>n>>x>>y;
    l=1<<n;
    k=n;
    init(3);
    dx=x;
    dy=y;
    hilbert(l);
    if(dx==1 && dy==1)
        nr+=0;
    else if(dx==1 && dy==2)
        nr+=2;
    else if(dx==2 && dy==1)
        nr++;
    else
        nr+=3;
    g<<nr;
    return 0;
}