Cod sursa(job #1949197)

Utilizator 1475369147896537415369Andrei Udriste 1475369147896537415369 Data 1 aprilie 2017 20:04:04
Problema Fractal Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#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;
}