Cod sursa(job #3238381)

Utilizator filipinezulBrain Crash filipinezul Data 24 iulie 2024 21:18:40
Problema Fractal Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <bits/stdc++.h>
using namespace std;
 
class Task {
public:
    void solve() {
        read_input();
        print_output(get_result());
    }
 
private:
    int ord, pos1, pos2;
 
    void read_input() {
        ifstream fin("fractal.in");
        fin >> ord >> pos1 >> pos2;
        fin.close();
    }

    //  1  4
    //  2  3
    long long distance(int k, int x, int y) {
        if (k == 0) {
            return 0LL;
        }

        int mid = (1 << (k - 1));

        if (x <= mid && y <= mid) {  // cadranul 1
            return distance(k - 1, y, x);
        }

        if (x >= mid + 1 && y <= mid) { // cadranul 2
            return mid * mid * 1LL + distance(k - 1, x - mid, y);
        }

        if (x >= mid + 1 && y >= mid + 1) { // cadranul 3
            return 2 * mid * mid * 1LL + distance(k - 1, x - mid, y - mid);
        }

        // cadranul 4
        return 3 * mid * mid * 1LL + distance(k - 1, 2 * mid - y + 1, mid - x + 1);    
    }
 
    long long get_result() {
        return distance(ord, pos2, pos1);
    }

    void print_output(long long result) {
        ofstream fout("fractal.out");
        fout << result;
        fout.close();
    }
};


int main(void)
{
    ios::sync_with_stdio(false);
    auto* task = new (std::nothrow) Task{};
    if (!task) {
        std::cerr << "new failed\n";
        return -1;
    }

    task->solve();
    delete task;

    return 0;
}