Cod sursa(job #803642)

Utilizator whoasdas dasdas who Data 27 octombrie 2012 22:34:46
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 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; state = 1; break;
                case 1: np = 0; state = 0; break;
                case 2: np = 2; break;
                case 3: np = 2; break;
            }
        } else if (i >= mij && j < mij) {   //CADRAN 2
            switch(state) {
                case 0: np = 1; break;
                case 1: np = 3; state = 2; break;
                case 2: np = 3; state = 1; break;
                case 3: np = 1; break;
            }
            i -= mij;
        } else if (i >= mij) {              //CADRAN 3
            switch(state) {
                case 0: np = 2; break;
                case 1: np = 2; break;
                case 2: np = 0; state = 3; break;
                case 3: np = 0; state = 2; break;
            }
            i -= mij;
            j -= mij;
        } else {                            //CADRAN 4
            switch(state) {
                case 0: np = 3; state = 3; break;
                case 1: np = 1; break;
                case 2: np = 1; break;
                case 3: np = 3; state = 0; break;
            }
            j -= mij;
        }
        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;
}