Cod sursa(job #462053)

Utilizator remusmpRemus MP remusmp Data 9 iunie 2010 17:13:26
Problema Fractal Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <stdlib.h>
#include <stdio.h>
#include <math.h>

int distk1[3][3] = {
	{0,0,0},
	{0,0,1},
	{0,3,2}
};

int main()
{
	FILE* fin = fopen("fractal.in", "r");
	FILE* fout = fopen("fractal.out", "w");

	int k, x, y;
	fscanf(fin, "%d %d %d", &k, &x, &y);

	int steps = 0;
	int lenk = pow((long double)2,k);

	while (k > 1)
	{
		int mid = lenk / 2;
		int block = 0;
		if (x <= mid && y <= mid)
		{
			block = 1;
			int tmp = x;
			x = y;
			y = tmp;
		}
		else if (x <= mid && y > mid)
		{
			block = 2;
			y -= mid;
		}
		else if (x > mid && y > mid)
		{
			block = 3;
			y -= mid;
			x -= mid;
		}
		else
		{
			block = 4;
			x -= mid;
			x = mid - y + 1;
			y = mid - x + 1;
		}

		steps += (block - 1) * (mid * mid - 1) + (block - 1);

		lenk = mid;
		k--;
	}

	steps += distk1[x][y];

	fprintf(fout, "%d", steps);

	fclose(fin);
	fclose(fout);
}