Pagini recente » Cod sursa (job #1599279) | Cod sursa (job #2476467) | Cod sursa (job #2647656) | Cod sursa (job #1433430) | Cod sursa (job #2037034)
#include <cstdio>
#include <algorithm>
using namespace std;
int x, y, k;
int cadran(int k, int x, int y)
{
int putere_2 = 1 << (k - 1);
if(x <= putere_2 && y <= putere_2)
{
return 1;
}
if(x <= putere_2 && y > putere_2)
{
return 2;
}
if(x > putere_2 && y > putere_2)
{
return 3;
}
if(x > putere_2 && y <= putere_2)
{
return 4;
}
}
void coord(int cadran, int k, int &x, int &y)
{
if(cadran == 1)
{
swap(x,y);
return;
}
if(cadran == 2)
{
y = y - (1 << (k - 1));
return;
}
if(cadran == 3)
{
x = x - (1 << (k - 1));
y = y - (1 << (k - 1));
return;
}
int tmp_x = x;
x = (1 << k) - y + 1;
y = (1 << k) - tmp_x + 1;
x = x - (1 << (k - 1));
}
int recursiva(int k, int x, int y)
{
if(k == 0)
{
return 0;
}
int c = cadran(k, x, y);
int x1 = x, y1 = y;
coord(c, k, x1, y1);
int cost = (c - 1) * (1 << (2 * (k - 1)));
return recursiva(k - 1, x1, y1) + cost;
}
void citire()
{
scanf("%d %d %d", &k, &x, &y);
printf("%d ", recursiva(k,x,y));
printf("\n");
}
int main()
{
freopen("fractal.in", "r", stdin);
freopen("fractal.out", "w", stdout);
citire();
}