Pagini recente » Cod sursa (job #3289184) | Cod sursa (job #3292482) | Cod sursa (job #3286861) | Cod sursa (job #3289233) | Cod sursa (job #3238381)
#include <bits/stdc++.h>
using namespace std;
class Task {
public:
void solve() {
read_input();
print_output(get_result());
}
private:
int ord, pos1, pos2;
void read_input() {
ifstream fin("fractal.in");
fin >> ord >> pos1 >> pos2;
fin.close();
}
// 1 4
// 2 3
long long distance(int k, int x, int y) {
if (k == 0) {
return 0LL;
}
int mid = (1 << (k - 1));
if (x <= mid && y <= mid) { // cadranul 1
return distance(k - 1, y, x);
}
if (x >= mid + 1 && y <= mid) { // cadranul 2
return mid * mid * 1LL + distance(k - 1, x - mid, y);
}
if (x >= mid + 1 && y >= mid + 1) { // cadranul 3
return 2 * mid * mid * 1LL + distance(k - 1, x - mid, y - mid);
}
// cadranul 4
return 3 * mid * mid * 1LL + distance(k - 1, 2 * mid - y + 1, mid - x + 1);
}
long long get_result() {
return distance(ord, pos2, pos1);
}
void print_output(long long result) {
ofstream fout("fractal.out");
fout << result;
fout.close();
}
};
int main(void)
{
ios::sync_with_stdio(false);
auto* task = new (std::nothrow) Task{};
if (!task) {
std::cerr << "new failed\n";
return -1;
}
task->solve();
delete task;
return 0;
}