Cod sursa(job #2037435)

Utilizator ruxi.icleanuRuxandra Icleanu ruxi.icleanu Data 12 octombrie 2017 11:01:52
Problema Fractal Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <stdio.h>
#include <stdlib.h>

int cdr, nr_pasi;

int c_hilbert(int n, int lin, int col) {
    int lim, i, aux;
    if(n==1) {
        if(lin==1 && col==0)
            nr_pasi++;
        else if(lin==1 && col==1)
            nr_pasi+=2;
        else if(lin==0 && col==1)
            nr_pasi+=3;
        return nr_pasi;
    }
    lim=1<<(n-1);
    if(lin<lim && col<lim) {
        cdr = 1;
        aux=col;
        col=lin;
        lin=aux;
    }
    if(lin>=lim && col<lim) {
        cdr = 2;
        lin-=lim;
    }
    if(lin>=lim && col>=lim) {
        cdr = 3;
        lin-=lim;
        col-=lim;
    }
    if(lin<lim && col>=lim) {
        cdr = 4;
        aux=lin;
        lin=2*lim-col-1;
        col=2*lim-aux-1;
        col-=lim;
    }
    for(i=0; i<cdr-1; i++)
        nr_pasi+=lim*lim;
    return c_hilbert(n-1, lin, col);
}

int main()
{
    int n, lin, col;
    FILE *fi, *fo;
    fi = fopen("fractal.in", "r");
    fo = fopen("fractal.out", "w");
    fscanf(fi, "%d%d%d", &n, &col, &lin);
    fprintf(fo, "%d", c_hilbert(n, lin-1, col-1));
    fclose(fi);
    fclose(fo);
    return 0;
}