Cod sursa(job #2485096)

Utilizator flibiaVisanu Cristian flibia Data 31 octombrie 2019 23:03:39
Problema Fractal Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
#pragma GCC optimize("03")
#include <bits/stdc++.h>
#define ll long long 

using namespace std;

ifstream in("fractal.in");
ofstream out("fractal.out");

int k, x, y;
ll pw[123];

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

    int lat = pw[k - 1];
    if (x <= lat && y <= lat)
        return solve(k - 1, y, x);

    if (x > lat && y <= lat)
        return lat * lat + solve(k - 1, x - lat, y);

    if (x > lat && y > lat)
        return 2 * lat * lat + solve(k - 1, x - lat, y - lat);

    if (x <= lat && y >= lat)
        return 3 * lat * lat + solve(k - 1, 2 * lat - y + 1, lat - x - 1);

    return -1;
}

int main() {
    pw[0] = 1;
    for (int i = 1; i <= 30; i++)
        pw[i] = 2 * pw[i - 1];

    in >> k >> y >> x;
    out << solve(k, x, y);
    return 0;
}