Pagini recente » Cod sursa (job #1198757) | Cod sursa (job #320482) | Cod sursa (job #2563065) | Cod sursa (job #1784299) | Cod sursa (job #1949197)
#include <cstdio>
using namespace std;
int Hilbert(int K, int X, int Y){
if(K == 1 && X == 1 && Y == 1) return 0;
if(K == 1 && X == 1 && Y == 2) return 1;
if(K == 1 && X == 2 && Y == 2) return 2;
if(K == 1 && X == 2 && Y == 1) return 3;
int power = 1 << (K - 1);
if(X <= power && Y <= power) return 0 * (power << 1) + Hilbert(K - 1, Y, X);
if(X <= power && Y > power) return 1 * (power << 1) + Hilbert(K - 1, X, Y - power);
if(X > power && Y > power) return 2 * (power << 1) + Hilbert(K - 1, X - power, Y - power);
if(X > power && Y <= power) return 3 * (power << 1) + Hilbert(K - 1, power - Y + 1, (power << 1) - X + 1);
}
int main(){
freopen("fractal.in", "r", stdin);
freopen("fractal.out", "w", stdout);
int K, X, Y;
scanf("%d %d %d", &K, &X, &Y);
printf("%d", Hilbert(K, X, Y));
return 0;
}