Cod sursa(job #1225499)

Utilizator patrick_vladPatrick Vlad patrick_vlad Data 2 septembrie 2014 18:05:32
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 4 kb
#include <fstream>
#define MAX 14
#define calcul m /= 2; steps += (total[count - 1] + 1) * (cad - 1); count--; x %= m; y %= m; if(!x) x = m; if(!y) y = m;
using namespace std;
ifstream f1 ("fractal.in");
ofstream f2 ("fractal.out");
int k, x, y, m = 2;
int steps = 0;
int total[MAX];
int count;
int cad = 0;
int config = 0;

/*void calc(){
    m /= 2;
    steps += (total[count - 1] + 1) * (cad - 1);
    count--;
    x %= m;
    y %= m;    
}*/
void config_0();
void config_1();
void config_2();
void config_3();

int main(){
    f1>>k;
    f1>>x;
    f1>>y;
    if(k > 1){
        int aux = k;
        count = k - 1;
        while(aux > 1){
            m *= 2;
            aux--;
        }
        total[0] = 3;
        for(int i = 1; i < k - 1; i++){
            total[i] = total[i - 1] * 4 + 3;
        }
        config_0();
    }
    f2<<steps<<"\n";
    return 0;
}
void config_0(){
    if(count){
        if(x * 2 > m){
            if(y * 2 > m){
                cad = 3;
                calcul
                config_0();
            } else {
                cad = 4;
                calcul
                config_1();
            }
        } else {
            if(y * 2 > m){
                cad = 2;
                calcul
                config_0();
            } else {
                cad = 1;
                calcul
                config_2();
            }
        }
    } else {
        if(x == 1){
            if(y == 2){
                steps += 1;
            }
        } else {
            if(y == 1){
                steps += 3;
            } else {
                steps += 2;
            }
        }
    }
}
void config_1(){
    if(count){
        if(x * 2 > m){
            if(y * 2 > m){
                cad = 1;
                calcul
                config_3();
            } else {
                cad = 4;
                calcul
                config_0();
            }
        } else {
            if(y * 2 > m){
                cad = 2;
                calcul
                config_1();
            } else {
                cad = 3;
                calcul
                config_1();
            }
        }
    } else {
        if(x == 1){
            if(y == 1){
                steps += 2;
            } else {
                steps += 1;
            }
        } else {
            if(y == 1){
                steps += 3;
            }
        }
    }
}
void config_2(){
    if(count){
        if(x * 2 > m){
            if(y * 2 > m){
                cad = 3;
                calcul
                config_2();
            } else {
                cad = 2;
                calcul
                config_2();
            }
        } else {
            if(y * 2 > m){
                cad = 4;
                calcul
                config_3();
            } else {
                cad = 1;
                calcul
                config_0();
            }
        }
    } else {
        if(x == 1){
            if(y == 2){
                steps += 3;
            }
        } else {
            if(y == 1){
                steps += 1;
            } else {
                steps += 2;
            }
        }
    }
}
void config_3(){
    if(count){
        if(x * 2 > m){
            if(y * 2 > m){
                cad = 1;
                calcul
                config_1();
            } else {
                cad = 2;
                calcul
                config_3();
            }
        } else {
            if(y * 2 > m){
                cad = 4;
                calcul
                config_2();
            } else {
                cad = 3;
                calcul
                config_3();
            }
        }
    } else {
        if(x == 1){
            if(y == 1){
                steps += 2;
            } else {
                steps += 3;
            }
        } else {
            if(y == 1){
                steps += 1;
            }
        }
    }
}