Pagini recente » Cod sursa (job #242378) | Cod sursa (job #2750351) | Cod sursa (job #5081) | Cod sursa (job #229603) | Cod sursa (job #2871472)
#include <fstream>
#include <vector>
using namespace std;
int Solve(int k, int x, int y) {
if (k == 1) {
return vector<int>{0, 3, 1, 2}[2 * (x-1) + (y-1)];
}
auto half_len = 1 << (k - 1);
auto half_steps = (1 << (2 * (k - 1))) - 1;
if (x <= half_len && y <= half_len) {
return Solve(k - 1, y, x);
} else if (x > half_len && y <= half_len) {
return half_steps + 1 + Solve(k - 1, x - half_len, y);
} else if (x > half_len && y > half_len) {
return 2 * half_steps + 2 + Solve(k - 1, x - half_len, y - half_len);
} else {
y -= half_len;
return 3 * half_steps + 3 + Solve(k - 1, half_len - y + 1, half_len - x + 1);
}
}
int main() {
ifstream fin("fractal.in");
ofstream fout("fractal.out");
int k, x, y;
fin >> k >> x >> y;
auto res = Solve(k, y, x);
fout << res << "\n";
return 0;
}