Cod sursa(job #2556585)

Utilizator preda.andreiPreda Andrei preda.andrei Data 25 februarie 2020 00:53:13
Problema Fractal Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>
#include <vector>

using namespace std;

int TotalSteps(int order)
{
    int steps = 0;
    for (int i = 1; i <= order; i += 1) {
        steps = 4 * steps + 3;
    }
    return steps;
}

int Solve(int order, int x, int y)
{
    if (order == 0) {
        return 0;
    }

    int half = (1 << order) / 2;
    if (x <= half && y <= half) {
        return Solve(order - 1, y, x);
    }
    if (x > half && y <= half) {
        return TotalSteps(order - 1) + 1
             + Solve(order - 1, x - half, y);
    }
    if (x > half && y > half) {
        return TotalSteps(order - 1) * 2 + 2
             + Solve(order - 1, x - half, y - half);
    }
    return TotalSteps(order - 1) * 3 + 3
         + Solve(order - 1, half - (y - half) + 1, half - x + 1);
}

int main()
{
    ifstream fin("fractal.in");
    ofstream fout("fractal.out");

    int order, col, row;
    fin >> order >> col >> row;

    auto res = Solve(order, row, col);
    fout << res << "\n";

    return 0;
}