Cod sursa(job #2486860)

Utilizator mihaicivMihai Vlad mihaiciv Data 3 noiembrie 2019 16:39:57
Problema Fractal Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <iomanip>

#define NMAX 120000
using namespace std;

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

int k, col_start, lin_start;


int calculate(int k_curent, int col, int lin, int val) {
    //cout << k_curent << " " << lin << " " << col << " " << val << "\n";
    if (k_curent == 1) {
        if (col == 1 && lin == 1) return val;
        if (col == 2 && lin == 1) return 1 + val;
        if (col == 2 && lin == 2) return 2 + val;
        return 3 + val;
    }

    int val_add = (1 << (2 * k_curent - 2));
    int mid = (1 << (k_curent - 1));
    if (lin <= mid && col <= mid) {
        return calculate(k_curent - 1, lin, col, val);
    }
    if (lin > mid && col <= mid) {
        return calculate(k_curent - 1, col, lin - mid, val + val_add);
    }
    if (lin > mid && col > mid) {
        return calculate(k_curent - 1, col - mid, lin - mid, val + 2 * val_add);
    }
    if (lin <= mid && col > mid) {
        return calculate(k_curent - 1, 2 * mid - col + 1, mid - lin + 1, val + 3 * val_add);
    }

}

int main() {

    f >> k >> col_start >> lin_start;
    g << calculate(k, col_start, lin_start, 0);

    return 0;
}