Cod sursa(job #2871472)

Utilizator preda.andreiPreda Andrei preda.andrei Data 14 martie 2022 20:06:21
Problema Fractal Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#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;
}