Cod sursa(job #2036970)

Utilizator SolcanMihaiSolcan Mihai Andrei SolcanMihai Data 11 octombrie 2017 15:38:41
Problema Fractal Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <cstdio>

int n, x, y;

void citire(){
    scanf("%d %d %d", &n, &y, &x);
}

bool maiMic(int x, int k){
    if(x <= (1 << (k - 1))){
        return true;
    }
    return false;
}

void solve(){
    int k = n;
    int sol = 0;

    while(k > 0){
//        I
        if(maiMic(x, k) == true && maiMic(y, k) == true){
            int tmp = x;
            x = y;
            y = tmp;
        }
//        II
        else if(maiMic(x, k) == false && maiMic(y, k) == true){
            sol += (1 << (2 * k - 2));
            x -= (1 << (k - 1));
            x = (1 << (k - 1)) + 1 - x;
            y = (1 << (k - 1)) + 1 - y;
            int tmp = x;
            x = y;
            y = tmp;
        }
//        III
        else if(maiMic(x, k) == false && maiMic(y, k) == false) {
            sol += 2 * (1 << (2 * k - 2));
            x -= (1 << (k - 1));
            y -= (1 << (k - 1));
        }
//        IV
        else if(maiMic(x, k) == true && maiMic(y, k) == false){
            sol += 3 * (1 << (2 * k - 2));
            y -= (1 << (k - 1));
        }
        k--;
    }

    printf("%d", sol);
}

int main() {
    freopen("fractal.in", "r", stdin);
    freopen("fractal.out", "w", stdout);

    citire();
    solve();

    return 0;
}