Pagini recente » Cod sursa (job #200520) | Cod sursa (job #1479079) | Cod sursa (job #1284145) | Cod sursa (job #2108520) | Cod sursa (job #2374976)
#include <bits/stdc++.h>
using namespace std;
int power(int b, int e) {
int result = 1;
while (e) {
result *= b;
e--;
}
return result;
}
int solve(int k, int x, int y, int steps) {
if (k == 1) {
if (x == 1 && y == 1) return steps;
if (x == 1 && y == 2) return steps + 1;
if (x == 2 && y == 2) return steps + 2;
else return steps + 3;
}
int quad_size = power(2, k - 1);
int quad_steps = power(4, k - 1);
if (x <= quad_size && y <= quad_size) {
return solve(k - 1, y, x, steps);
} else if (x <= quad_size && y > quad_size) {
return solve(k - 1, x, y - quad_size, steps + quad_steps);
} else if (x > quad_size && y > quad_size) {
return solve(k - 1, x - quad_size, y - quad_size, steps + 2 * quad_steps);
} else {
return solve(k - 1, quad_size + 1 - y, quad_size + 1 - x + quad_size,
steps + 3 * quad_steps);
}
}
int main() {
stdin = freopen("fractal.in", "r", stdin);
stdout = freopen("fractal.out", "w", stdout);
int k, x, y;
int steps;
cin >> k >> x >> y;
steps = solve(k, x, y, 0);
cout << steps;
}