Cod sursa(job #2349136)

Utilizator mircearoataMircea Roata Palade mircearoata Data 20 februarie 2019 10:47:33
Problema Fractal Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <fstream>

using namespace std;

ifstream in("fractal.in");
ofstream out("fractal.out");

int k, col, lin;

int lungime(int lin, int col, int dim)
{
    if(dim == 1)
    {
        if(lin == 0 && col == 0)
            return 0;
        if(lin == 1 && col == 0)
            return 1;
        if(lin == 1 && col == 1)
            return 2;
        if(lin == 0 && col == 1)
            return 3;
    }
    if(lin < (1 << (dim - 1)) && col < (1 << (dim - 1)))
    {
        /// sus stanga
        return (1 << (2 * (dim - 1))) - lungime(col, (1 << (dim - 1)) - lin - 1, dim - 1) - 1;
    }
    else if(lin >= (1 << (dim - 1)) && col < (1 << (dim - 1)))
    {
        /// jos stanga
        return (1 << 2 * (dim - 1)) + lungime(lin - (1 << (dim - 1)), col, dim - 1);
    }
    else if(lin >= (1 << (dim - 1)) && col >= (1 << (dim - 1)))
    {
        /// jos dreapta
        return 2 * (1 << 2 * (dim - 1)) + lungime(lin - (1 << (dim - 1)), col - (1 << (dim - 1)), dim - 1);
    }
    else if(lin < (1 << (dim - 1)) && col >= (1 << (dim - 1)))
    {
        /// sus dreapta
        return 3 * (1 << 2 * (dim - 1)) + (1 << (2 * (dim - 1))) - lungime((1 << (dim)) - col - 1,  lin, dim - 1) - 1;
    }
    return -1;
}

int main()
{
    in >> k >> col >> lin;
    out << lungime(lin-1, col-1, k);
    return 0;
}