Cod sursa(job #1674185)

Utilizator razvandRazvan Dumitru razvand Data 4 aprilie 2016 14:36:02
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <iostream>
#include <fstream>

using namespace std;

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

unsigned long long pw2[20];

long long dist(int x, int y, int k) {
    if(k == 0)
        return 0;
    long long piv = pw2[k-1];
    if(x <= piv && y <= piv) {
        swap(x,y);
        return dist(x, y, k-1);
    }
    if(x > piv && y <= piv)
        return piv*piv+dist(x-piv, y, k-1);
    if(x > piv && y > piv)
        return 2*piv*piv+dist(x-piv, y-piv, k-1);
    if(x <= piv && y > piv) {
        y -= piv;
        x = piv-x+1;
        y = piv-y+1;
        swap(x,y);
        return 3*piv*piv+dist(x, y, k-1);
    }
}

int main() {
    int k,x,y;
    in >> k >> x >> y;
    swap(x,y);
    pw2[0] = 1;
    for(int i = 1; i <= 17; i++)
        pw2[i] = pw2[i-1]*2;
    out << dist(x, y, k);
    return 0;
}