Cod sursa(job #2238079)

Utilizator M.AnaAna Marginean M.Ana Data 4 septembrie 2018 15:22:49
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>
#include <bits/stdc++.h>
using namespace std;

ifstream in;
ofstream out;

int find_quadrant(int k, int x, int y)
{
	int side = (int)pow(2, k);

	if(x <= side / 2 && y <= side / 2)
		return 1;

	if(x <= side / 2 && y > side / 2)
		return 2;

	if(x > side / 2 && y > side / 2)
		return 3;

	if(x > side / 2 && y <= side / 2)
		return 4;

	return 0;
}

int count_steps(int k, int x, int y)
{
	if (k == 0)
		return 0;

	int quadrant = find_quadrant(k, x, y);
	int steps = (quadrant - 1) * ((int)pow(4, k - 1));
	int half_side = (int)(pow(2, k - 1));

	switch(quadrant)
	{
		case 1:
		{
			int aux = y;
			y = x;
			x = aux;
			break;
		}
		case 2:
		{
			y = (y - 1) % half_side + 1;
			break;
		}
		case 3:
		{
			x = (x - 1) % half_side + 1;
			y = (y - 1) % half_side + 1;
			break;
		}
		case 4:
		{
			int aux = x;
			x = ceil((pow(2, k) + 1)/2) - y;
			y = pow(2, k) + 1 - aux;
			break;
		}
	}

	return steps + count_steps(k - 1, x, y);
}

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

	in.open("fractal.in");
	in >> k >> x >> y;
	in.close();

	int steps = count_steps(k, x, y);

	out.open("fractal.out");
	out << steps;
	out.close();

	return 0;
}