Cod sursa(job #985129)

Utilizator manutrutaEmanuel Truta manutruta Data 16 august 2013 15:28:47
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
# include <iostream>
# include <fstream>
using namespace std;

# define MAXK 17

int size[MAXK];

int dist(int k, int x, int y)
{
    if(!k) {
        return 0;
    }
    if(x <= (1 << k - 1)) {
        if(y <= (1 << k - 1)) {
            return dist(k - 1, y, x);
        } else {
            return dist(k - 1, x, y - (1 << (k - 1))) + (size[k - 1] + 1);
        }
    } else {
        if(y <= (1 << k - 1)) {
            return dist(k - 1, (1 << k - 1) - y + 1, (1 << k) - x + 1) + (size[k - 1] + 1) * 3;
        } else {
            return dist(k - 1, x - (1 << (k - 1)), y - (1 << (k - 1))) + (size[k - 1] + 1) * 2;
        }
    }
}

int main()
{
    fstream f("fractal.in", ios::in);
    fstream g("fractal.out", ios::out);

    int k, x, y;
    f >> k >> x >> y;

    for(int i = 1; i < MAXK; ++i) {
        size[i] = size[i - 1] * 4 + 3;
    }

    g << dist(k, x, y) << endl;

    f.close();
    g.close();
    return 0;
}