Pagini recente » Cod sursa (job #372946) | Cod sursa (job #1135653) | Cod sursa (job #2634506) | Cod sursa (job #1544534) | Cod sursa (job #2197181)
#include <cstdio>
#include <algorithm>
using namespace std;
void read(int &k, int &x,int &y)
{
freopen("fractal.in","r",stdin);
freopen("fractal.out","w",stdout);
scanf("%d %d %d",&k,&x,&y);
}
int findCadran(int k, int x, int y)
{
int ordin = 1 << (k-1);
bool arg1 = (x <= ordin);
bool arg2 = (y<= ordin);
if( arg1 && arg2)
return 1;
if( arg1 && !arg2)
return 2;
if( ! arg1 && !arg2)
return 3;
if( ! arg1 && arg2)
return 4;
}
void modifyCoord(int cadran, int k, int x, int y)
{
switch(cadran)
{
case 1 :
{
swap(x,y);
return;
}
case 2 :
{
y -= (1<< (k - 1));
return;
}
case 3 :
{
x -= (1<< (k - 1));
y -= (1<< (k - 1));
return;
}
default :
{
int tempX = x;
x = (1<<k) - y + 1;
y = (1 << k) - tempX + 1;
x -= (1<< (k - 1));
return;
}
}
}
int RecursiveMethod(int k,int x,int y)
{
if(k == 0)
return 0;
int cadran = findCadran(k,x,y);
int tempX = x;
int tempY = y;
modifyCoord(cadran,k,tempX,tempY);
int cost = ( cadran - 1) * ( 1 << 2* (k-1));
return RecursiveMethod(k - 1, tempX, tempY) + cost;
}
int main()
{
int k,x,y;
read(k,x,y);
int raspuns = RecursiveMethod(k,x,y);
printf("%d ",raspuns);
return 0;
}