Pagini recente » Cod sursa (job #2794371) | Cod sursa (job #1112334) | Cod sursa (job #605231) | Cod sursa (job #2256838) | Cod sursa (job #2238079)
#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;
}