Cod sursa(job #803599)

Utilizator whoasdas dasdas who Data 27 octombrie 2012 21:31:33
Problema Fractal Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <fstream>

using namespace std;

int Hilbert(int k, int i, int j, int state)
{
    int s = 0, mij, np;
    while (k > 0) {
        mij = 1<<k-1;
        if (i < mij && j < mij) {           //CADRAN 1
            switch(state) {
                case 0: np = 0; break;
                case 1: np = 0; break;
                case 2: np = 2; break;
                case 3: np = 2; break;
            }
            state = (state + 1) % 4;
        } else if (i >= mij && j < mij) {   //CADRAN 2
            switch(state) {
                case 0: np = 1; break;
                case 1: np = 3; break;
                case 2: np = 3; break;
                case 3: np = 1; break;
            }
            i -= mij;
        } else if (i >= 1<<k-1) {           //CADRAN 3
            switch(state) {
                case 0: np = 2; break;
                case 1: np = 2; break;
                case 2: np = 0; break;
                case 3: np = 0; break;
            }
            i -= mij;
            j -= mij;
        } else {                            //CADRAN 4
            switch(state) {
                case 0: np = 3; break;
                case 1: np = 1; break;
                case 2: np = 1; break;
                case 3: np = 3; break;
            }
            j -= mij;
            state = (state - 1) % 4;
        }
        s += np*mij*mij;
        k--;
    }
    return s;
}

int main()
{
    ifstream  in("fractal.in");
    ofstream out("fractal.out");
    int k, x, y;
    in>>k>>x>>y;
    out<<Hilbert(k, y-1, x-1, 0);
    return 0;
}