Pagini recente » Cod sursa (job #2062355) | Cod sursa (job #3310955) | Diferente pentru problema/macseq intre reviziile 20 si 31 | Cod sursa (job #972897) | Cod sursa (job #3341455)
#include <bits/stdc++.h>
using namespace std;
long long solve(int k, long long x, long long y) {
if (k == 0) return 0;
long long half = 1LL << (k - 1);
long long block = 1LL << (2 * (k - 1));
// determinăm cadranul
if (x <= half && y <= half) {
// cadranul 1 – rotit
return solve(k - 1, y, x);
}
if (x <= half && y > half) {
// cadranul 2
return block + solve(k - 1, x, y - half);
}
if (x > half && y > half) {
// cadranul 3
return 2 * block + solve(k - 1, x - half, y - half);
}
// cadranul 4 – rotit
return 3 * block + solve(k - 1, half - y + 1, 2 * half - x + 1);
}
int main() {
ifstream fin("fractal.in");
ofstream fout("fractal.out");
int K;
long long x, y;
fin >> K >> x >> y;
fout << solve(K, x, y);
return 0;
}