Pagini recente » Cod sursa (job #2105151) | Cod sursa (job #2671278) | Cod sursa (job #2065992) | Cod sursa (job #1455564) | Cod sursa (job #1834249)
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
int compsize[20],i,j,n,k,x,y;
int calc(int n, int x, int y, int idx) {
if (n==2) {
if (x==1 && y==1) return 0;
else if (x==2 && y==1) return 1;
else if (x==2 && y==2) return 2;
else return 3;
}
int mid=n/2;
if (x<=mid && y<=mid) return calc(n/2,y,x,idx-1);
else if (x>mid && y<=mid) return compsize[idx-1]+1+calc(n/2,x-mid,y,idx-1);
else if (x>mid && y>mid) return compsize[idx-1]*2+2+calc(n/2,x-mid,y-mid,idx-1);
else {
int newx=x;
int newy=y-n/2;
int newn=n/2;
newy=newn-newy+1;
newx=newn-newx+1;
swap(newx,newy);
return compsize[idx-1]*3+3+calc(n/2,newx,newy,idx-1);
}
}
int main(void) {
ifstream cin("fractal.in");
ofstream cout("fractal.out");
cin>>k>>y>>x;
compsize[1]=3;
for (i=2; i<=k; ++i) compsize[i]=4*compsize[i-1]+3;
cout<<calc((1<<k),x,y,k);
return 0;
}