Pagini recente » Cod sursa (job #501917) | Cod sursa (job #1747940) | Cod sursa (job #225824) | Cod sursa (job #1537744) | Cod sursa (job #833780)
Cod sursa(job #833780)
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;
int cadran(int k, int x, int y)
{
long long val = pow(2.0, k);
if ((x <= val / 2) && (y <= val / 2)) {
return 4;
}
if ((x > val / 2) && (y <= val / 2)) {
return 1;
}
if ((x > val / 2) && (y > val / 2)) {
return 2;
}
if ((x <= val / 2) && (y > val / 2)) {
return 3;
}
return -1;
}
int count(int k)
{
if (k == 1) {
return 3;
}
return 4*count(--k) + 3;
}
int count(int k, int x, int y)
{
if (k == 1) {
if (x == 1 && y == 1) {
return 0;
}
if (x == 1 && y == 2) {
return 1;
}
if (x == 2 && y == 1) {
return 3;
}
return 2;
}
long long val = pow(2.0, k - 1);
if (cadran(k, x, y) == 4) {
return count(--k, y, x);
} else if (cadran(k, x, y) == 3) {
return 1 + count(k - 1) + count(--k, x, y - val);
} else if (cadran(k, x, y) == 2) {
return 2 + 2*count(k - 1) + count(--k, x - val, y - val);
} else if (cadran(k, x, y) == 1) {
return 3 + 3*count(k - 1) + count(--k, val - y + 1, (val - (x - val) + 1));
}
return -1;
}
int main()
{
FILE *f = fopen("fractal.in", "rt");
FILE *g = fopen("fractal.out", "wt");
int x, y, k;
fscanf (f, "%d%d%d", &k, &y, &x);
fprintf(g, "%d", count(k, x, y));
return 0;
}