Cod sursa(job #3227027)

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

// 1 4
// 2 3
long long sol = 0;
void drum(int n, int x, int y){
    if(n == 0){
        sol += 0ll;
        return;
    }
    //vedem in ce cadran ne aflam
    //cadranul 1
    int l = (1 << (n - 1));
    if(x <= l && y <= l){
        // g << "1 " << sol << '\n';
        drum(n - 1, y, x);
        return;
    }
    //cadran 2
    if(x >= (l + 1) && y <= l){
        sol += l* l * 1ll;
        // g << "2 " << sol << '\n';
        drum(n - 1, x - l, y);
        return;
    }
    //cadranul 3
    if(x >= (l + 1) && y >= (l + 1)){
        sol += 2 * l * l * 1ll;
        // g << "3 " << sol << '\n';
        drum(n - 1, x - l, y - l);
        return;
    }
    //cadranul 4
    if(x <= l && y >= (l + 1)){
        sol += 3 * l * l * 1ll;
        // g << "4 " << sol << '\n';
        drum(n - 1, 2 * l - y + 1, x);
        return;
    }
}
int main(){
    ios::sync_with_stdio(0);
    f.tie(0);
    f >> k >> y >> x;
    drum(k, x, y);
    g << sol << '\n';
}