Cod sursa(job #2343697)

Utilizator Anakin1001George Giorgiu Gica Anakin1001 Data 14 februarie 2019 11:00:23
Problema Fractal Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.82 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,poz;
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);
            poz=1;
        }
        else if(dx>l/2 && dy<=l/2){
            nr+=d[3]*l;
            dx-=l/2;
            init(3);
            poz=3;
        }
        else if(dx<=l/2 && dy>l/2){
            nr+=d[2]*l;
            dy-=l/2;
            init(2);
            poz=2;
        }
        else if(dx>l/2 && dy>l/2){
            nr+=d[4]*l;
            dx-=l/2;
            dy-=l/2;
            init(4);
            poz=4;
        }
        k--;
        hilbert(l/2);
    }
}
int main()
{   f>>n>>y>>x;
    l=1<<n;
    k=n;
    init(3);
    dx=x;
    dy=y;
    hilbert(l);
    if(d[poz]==1 || d[poz]==2){
        if(dx==1 && dy==1)
            nr+=0;
        else if(dx==1 && dy==2)
            nr+=3;
        else if(dx==2 && dy==1)
            nr++;
        else
            nr+=2;
    }
    else if(d[poz]==0){
        if(dx==1 && dy==1)
            nr+=0;
        else if(dx==1 && dy==2)
            nr+=1;
        else if(dx==2 && dy==1)
            nr+=3;
        else
            nr+=2;
    }
    else if(d[poz]==3){
        if(dx==1 && dy==1)
            nr+=2;
        else if(dx==1 && dy==2)
            nr+=3;
        else if(dx==2 && dy==1)
            nr++;
        else
            nr+=0;
    }
    g<<nr;
    return 0;
}