Cod sursa(job #1221573)

Utilizator g3ppyStoian Vlad g3ppy Data 20 august 2014 18:51:16
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <stdio.h>

void rotate(int *x, int *y, int n, int qx, int qy) {
    if (qy == 0) {
        if (qx == 1) {
            *x = n - 1 - *x;
            *y = n - 1 - *y;
        }

        *x ^= *y;
        *y ^= *x;
        *x ^= *y;
    }
}

int compute_distance (int x, int y, int n) {
    int dimension = 1 << n;
    int distance = 0;

    for (int current_dimension = dimension / 2; current_dimension > 0; current_dimension /= 2) {
        int quadrant_x = (x & current_dimension) > 0;
        int quadrant_y = (y & current_dimension) > 0;

        distance += current_dimension * current_dimension * ((3 * quadrant_x) ^ quadrant_y);

        rotate(&x, &y, current_dimension, quadrant_x, quadrant_y);
    }

    return distance;
}

int main() {
    int n, x, y;

    freopen("fractal.in", "rt", stdin);
    freopen("fractal.out", "wt", stdout);

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

    int distance = compute_distance(x - 1, y - 1, n);

    printf("%d\n", distance);

    return 0;
}