Cod sursa(job #1741460)

Utilizator Alexghita96Ghita Alexandru Alexghita96 Data 13 august 2016 22:35:57
Problema Fractal Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <cstdio>
#include <cstdlib>

using namespace std;

int solve(int ordin, int cadran, int tx, int ty) {
    if (ordin == 0) {
        return 0;
    }

    int tcadran, dim = 1, ncadran, nx, ny;

    for (int i = 1; i <= ordin; ++i) {
        dim *= 2;
    }

    if (tx <= dim / 2 && ty <= dim / 2) {
        tcadran = 1;
    }
    else if (tx <= dim / 2 && ty > dim / 2) {
        tcadran = 2;
    }
    else if (tx >= dim / 2 && ty > dim / 2) {
        tcadran = 3;
    }
    else {
        tcadran = 4;
    }

    if (tx > dim / 2) {
        nx = tx - dim / 2;
    }
    else {
        nx = tx;
    }
    if (ty > dim / 2) {
        ny = ty - dim / 2;
    }
    else {
        ny = ty;
    }

    if (tcadran == 2 || tcadran == 3) {
        ncadran = 1;
    }
    else {
        if (cadran == 4) {
            ncadran = 1;
        }
        else {
            ncadran = 4;
        }

        if (tcadran == 1) {
            int o = nx;
            nx = dim / 2 - ny + 1;
            ny = o;
        }
        else {
            int o = ny;
            ny = dim / 2 - nx + 1;
            nx = ny;
        }
    }

    return (dim / 2) * (dim / 2) * abs(cadran - tcadran) + solve(ordin - 1, ncadran, nx, ny);
}

int main() {
    freopen("fractal.in", "r", stdin);
    freopen("fractal.out", "w", stdout);

    int k, x, y;

    scanf("%d%d%d", &k, &x, &y);

    printf("%d", solve(k, 1, x, y));
}