Pagini recente » Borderou de evaluare (job #1010147) | Borderou de evaluare (job #1242503) | Cod sursa (job #699572) | Borderou de evaluare (job #1569298) | Cod sursa (job #272522)
Cod sursa(job #272522)
#include <cstdio>
using namespace std;
int n, x, y, sol;
int rec(int n, int x, int y) {
int dn1 = (1 << (n - 1));
if (n == 1) {
if (x == 1 && y == 2)
return 4;
else
return x + y - 1;
}
if (x <= dn1 && y <= dn1)
return rec(n - 1, y, x);
if (x > dn1 && y <= dn1)
return rec(n - 1, x - dn1, y) + dn1 * dn1;
if (x > dn1 && y > dn1)
return rec(n - 1, x - dn1, y - dn1) + 2 * dn1 * dn1;
if (x <= dn1 && y > dn1)
return rec(n - 1, dn1 - (y - dn1) + 1, dn1 - x + 1) + 3 * dn1 * dn1;
}
int main() {
freopen("fractal.in", "r", stdin);
freopen("fractal.out", "w", stdout);
scanf("%d%d%d", &n, &y, &x);
printf("%d\n", rec(n, x, y) - 1);
return 0;
}