Cod sursa(job #2643680)

Utilizator DenisONIcBanu Denis Andrei DenisONIc Data 20 august 2020 20:44:31
Problema Fractal Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<bits/stdc++.h>

#define KMAX 17
#define ll long long

using namespace std;

ll lg[KMAX];
int k,x,y;

void rotateRight(int &x, int &y, int mid){
    int y2 = x;
    int x2 = mid - y + 1;
    x = x2;
    y = y2;
}

ll solve(int k,int x,int y){
    int mij = 1<<(k-1);

    if (k == 1){
        if (x == 1 && y == 1) return 0;
        if (x == 1 && y == 2) return 1;
        if (x == 2 && y == 2) return 2;
        return 3;
    }

    if (x <= mij && y <= mij){
        rotateRight(x,y,mij);
        return lg[k-1] - solve(k-1,x,y);
    }

    if (x <= mij){
        return lg[k-1] + 1 + solve(k-1, x, y - mij);
    }

    if (y > mij){
        return 2 * lg[k-1] + 2 + solve(k-1, x - mij, y - mij);
    }

    x -= mij;
    rotateRight(x,y,mij);
    rotateRight(x,y,mij);
    rotateRight(x,y,mij);
    return 3 * lg[k-1] + 3 + lg[k-1] - solve(k-1, x, y);
}

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

    cin >> k >> x >> y;

    lg[1] = 3;
    for (int i=2;i<=k;i++){
        lg[i] = lg[i-1] * 4  + 3;
    }

    cout << solve(k, x, y);

    return 0;
}