Pagini recente » Cod sursa (job #3141832) | Cod sursa (job #2169110) | Cod sursa (job #2893057) | Cod sursa (job #2872429) | Cod sursa (job #2349136)
#include <fstream>
using namespace std;
ifstream in("fractal.in");
ofstream out("fractal.out");
int k, col, lin;
int lungime(int lin, int col, int dim)
{
if(dim == 1)
{
if(lin == 0 && col == 0)
return 0;
if(lin == 1 && col == 0)
return 1;
if(lin == 1 && col == 1)
return 2;
if(lin == 0 && col == 1)
return 3;
}
if(lin < (1 << (dim - 1)) && col < (1 << (dim - 1)))
{
/// sus stanga
return (1 << (2 * (dim - 1))) - lungime(col, (1 << (dim - 1)) - lin - 1, dim - 1) - 1;
}
else if(lin >= (1 << (dim - 1)) && col < (1 << (dim - 1)))
{
/// jos stanga
return (1 << 2 * (dim - 1)) + lungime(lin - (1 << (dim - 1)), col, dim - 1);
}
else if(lin >= (1 << (dim - 1)) && col >= (1 << (dim - 1)))
{
/// jos dreapta
return 2 * (1 << 2 * (dim - 1)) + lungime(lin - (1 << (dim - 1)), col - (1 << (dim - 1)), dim - 1);
}
else if(lin < (1 << (dim - 1)) && col >= (1 << (dim - 1)))
{
/// sus dreapta
return 3 * (1 << 2 * (dim - 1)) + (1 << (2 * (dim - 1))) - lungime((1 << (dim)) - col - 1, lin, dim - 1) - 1;
}
return -1;
}
int main()
{
in >> k >> col >> lin;
out << lungime(lin-1, col-1, k);
return 0;
}