Cod sursa(job #2082361)

Utilizator lessanleonard savu lessan Data 6 decembrie 2017 00:37:39
Problema Fractal Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<stdio.h>
void rezolva(int k,int x,int y,int *numar_pasi,int two_to_k){
    if(k==1){
        if(x == 1 && y == 2)
            (*numar_pasi)++;
        if(x == 2 && y == 1)
            (*numar_pasi) += 3;
        if(x == 2 && y == 2)
            (*numar_pasi) += 2;
    }
    else {
        int coord = 1<<(k-1);
        if(x <= coord && y <= coord){
            x^=y;
            y^=x;
            x^=y;
        }
        else if(x <= coord && y > coord){
            y-=k;
            if(y>k)
                y--;
            (*numar_pasi) += two_to_k;
        }
        else if(x > coord && y > coord){
            x=x-(k+1);
            y=y-(k+1);
            (*numar_pasi) += 2*two_to_k;
        }
        else if(x > coord && y <= coord){
            x-=k;
            if(x>k)
                x--;
            (*numar_pasi) += 3*two_to_k;
        }
        rezolva(--k,x,y,numar_pasi,two_to_k/4);
    }
}
int main(){
    FILE *fisier_intrare,*fisier_iesire;

    fisier_intrare = fopen("fractal.in","rt");
    fisier_iesire = fopen("fractal.out","wt");

    int k,x,y;

    int numar_pasi = 0;

    fscanf(fisier_intrare,"%d %d %d",&k,&x,&y);

    rezolva(k,x,y,&numar_pasi,1<<(2*k-2));

    fprintf(fisier_iesire,"%d",numar_pasi);

    return 0;
}