Pagini recente » Cod sursa (job #3038184) | Cod sursa (job #3129383) | Cod sursa (job #863227) | Cod sursa (job #688576) | Cod sursa (job #2347220)
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int power[32];
int pos1(int x, int y)
{
if(x == 1)
{
if(y == 1)
return 0;
if(y == 2)
return 1;
}
else
{
if(y == 2)
return 2;
if(y == 1)
return 3;
}
}
int pos(int k, int x, int y)
{
if(k == 1)
return pos1(x, y);
if(x <= power[k - 1] && y <= power[k - 1])
return pos(k - 1, y, x);
if(x > power[k - 1] && y <= power[k - 1])
return power[2 * k] - 1 - pos(k - 1, y, power[k] - x + 1);
if(x <= power[k - 1] && y > power[k - 1])
return power[2 * k - 2] + pos(k - 1, x, y - power[k - 1]);
if(x > power[k - 1] && y > power[k - 1])
return power[2 * k - 1] + pos(k - 1, x - power[k - 1], y - power[k - 1]);
}
void init()
{
power[0] = 1;
for(int i = 1; i < 32; ++i)
power[i] = 2 * power[i - 1];
}
int main()
{
freopen("fractal.in", "r", stdin);
freopen("fractal.out", "w", stdout);
int k, x, y;
cin >> k >> x >> y;
init();
cout << pos(k, x, y);
return 0;
}