Pagini recente » Cod sursa (job #657840) | Cod sursa (job #1025140) | Cod sursa (job #2551009) | Cod sursa (job #2284780) | Cod sursa (job #2069531)
#include<fstream>
#include<cstring>
using namespace std;
ifstream cin("fractal.in");
ofstream cout("fractal.out");
int sol[16],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 sol[idx-1]+1+calc(n/2,x-mid,y,idx-1);
else if (x>mid && y>mid) return sol[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 sol[idx-1]*3+3+calc(n/2,newx,newy,idx-1);
}
}
int main()
{
cin>>k>>y>>x;
sol[1]=3;
for (i=2; i<=k; ++i) sol[i]=4*sol[i-1]+3;
cout<<calc((1<<k),x,y,k);
return 0;
}