Pagini recente » Cod sursa (job #2163986) | Cod sursa (job #1793602) | Cod sursa (job #2488635) | Cod sursa (job #1912106) | Cod sursa (job #1221573)
#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;
}