Cod sursa(job #848886)

Utilizator deneoAdrian Craciun deneo Data 5 ianuarie 2013 21:05:14
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>
#include <algorithm>
using namespace std;

#define MAXK 16

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

void rotate1(int &x, int &y, int k) {
    int aux = y;
    y = x;
    x = (1 << k) - aux + 1;
}

void rotate2(int &x, int &y, int k) {
    int aux = y;
    y = (1 << k) - x + 1;
    x = aux;
}

int fractal (int x, int y, int k) {
    if (k == 0)
        return 0;
    --k;
    int sum = 0, d = 1 << k;
    if (x <= d) {
        if (y <= d) {
            rotate2(x, y, k);
            y = (1 << k) - y + 1;
        }
        else {
            y -= d;
            rotate1(x, y, k);
            y = (1 << k) - y + 1;
            sum += d * d * 3;
        }
    }
    else {
        x -= d;
        if (y <= d)
            sum += d * d;
        else {
            sum += d * d * 2;
            y -= d;
        }
    }
    return sum + fractal (x, y, k);
}

int main() {
    int x, y, k;
    fin >> k >> y >> x;
    fout << fractal(x, y, k);
    return 0;
}