Pagini recente » Cod sursa (job #515065) | Cod sursa (job #2079704) | Cod sursa (job #1390980) | Cod sursa (job #1918178) | Cod sursa (job #2210225)
#include <bits/stdc++.h>
using namespace std;
int k, x, y;
long long sol;
inline void divide(int k, int x, int y){
if(k == 1) {
if(x == 1 && y == 2) sol += 3;
if(x == 2 && y == 2) sol += 2;
if(x == 2 && y == 1) sol += 1;
printf("%lld", sol);
return ;
}
if(x <= (1 << (k - 1)) && y <= (1 << (k - 1))){
///zona 1
int aux = y;
y = (1 << (k - 1)) - x + 1;
x = aux;
y = (1 << (k - 1)) - y + 1;
divide(k - 1, x, y);
}
if(x > (1 << (k - 1)) && y <= (1 << (k - 1))){
///zona 2
sol += (1LL * (1 << (k - 1)) * (1 << (k - 1)));
divide(k - 1, x - (1 << (k - 1)), y);
}
if(x > (1 << (k - 1)) && y > (1 << (k - 1))){
///zona 3
sol += (1LL * 2 * (1 << (k - 1)) * (1 << (k - 1)));
divide(k - 1, x - (1 << (k - 1)), y - (1 << (k - 1)));
}
if(x <= (1 << (k - 1)) && y > (1 << (k - 1))){
///zona 4
sol += (1LL * 3 * (1 << (k - 1)) * (1 << (k - 1)));
y -= (1 << (k - 1));
y = (1 << (k - 1)) - y + 1;
int aux = y;
y = (1 << (k - 1)) - x + 1;
x = aux;
divide(k - 1, x, y);
}
}
int main()
{
freopen("fractal.in", "r", stdin);
freopen("fractal.out", "w", stdout);
scanf("%d%d%d", &k, &x, &y);
swap(x, y);
divide(k, x, y);
return 0;
}