Cod sursa(job #3227028)

Utilizator PescarusTanislav Luca Andrei Pescarus Data 24 aprilie 2024 12:23:55
Problema Fractal Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
using namespace std;
ifstream f("fractal.in");
ofstream g("fractal.out");
int k, x, y;

// 1 4
// 2 3

//ai grija la cum faci rotatiile alea ca uneori trebuie sa iei coordonatele in oglinda (in general y - ul)
long long sol = 0;
long long drum(int n, int x, int y){
    if(n == 0){
        return 0ll;
    }
    //vedem in ce cadran ne aflam
    //cadranul 1
    int l = (1 << (n - 1));
    if(x <= l && y <= l){
        return drum(n - 1, y, x);
    }
    //cadran 2
    if(x >= (l + 1) && y <= l){
        return l * l * 1ll + drum(n - 1, x - l, y);
    }
    //cadranul 3
    if(x >= (l + 1) && y >= (l + 1)){
        return 2 * l * l * 1ll + drum(n - 1, x - l, y - l);
    }
    //cadranul 4
    if(x <= l && y >= (l + 1)){
        return 3 * l * l * 1ll + drum(n - 1, 2 * l - y + 1, l - x + 1);
    }
}
int main(){
    ios::sync_with_stdio(0);
    f.tie(0);
    f >> k >> y >> x;
    g << drum(k, x, y);
}