Cod sursa(job #468359)

Utilizator savimSerban Andrei Stan savim Data 3 iulie 2010 11:43:34
Problema Fractal Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <stdio.h>

int k, x, y, sol;

inline int get_cadran(int x, int y, int val) {
	if (x <= val && y <= val)
		return 0;
	if (x <= val && y > val)
		return val * val;
	if (x > val && y > val)
		return 2 * val * val;
	if (x > val && y <= val)
		return 3 * val * val;
}

int main() {

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

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

	while (k > 0) {
		int rotation, val = 1 << (k - 1);
		if (x <= val && y <= val)
			rotation = 3;
		if (x > val && y <= val)
			rotation = 1;

		sol += get_cadran(x, y, val);

		if (x > val)
			x -= val;
		if (y > val)
			y -= val;

		for (int i = 1; i <= rotation; i++) {
			int NewX = y;
			int NewY = val - x + 1;

			x = NewX; y = NewY;
		}
		if (rotation)
			x = val - x + 1;

		k--;
	}

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

	return 0;
}