Pagini recente » Cod sursa (job #2917051) | Cod sursa (job #372383) | Cod sursa (job #1599576) | Cod sursa (job #822207) | Cod sursa (job #1949212)
#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 * power + Hilbert(K - 1, Y, X);
if(X <= power && Y > power) return 1 * power * power + Hilbert(K - 1, X, Y - power);
if(X > power && Y > power) return 2 * power * power + Hilbert(K - 1, X - power, Y - power);
if(X > power && Y <= power) return 3 * power * power + 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;
}