Pagini recente » Cod sursa (job #2756707) | Cod sursa (job #70380) | Cod sursa (job #1051959) | Cod sursa (job #1950797) | Cod sursa (job #2343697)
#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;
}