Cod sursa(job #1942933)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 28 martie 2017 11:55:25
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <cstdio>

using namespace std;
int linii[16],sol,ko,pa;
void traseu (int k,int x,int y){
    int lat;
    lat=(1<<k);
    //if (k==1)
      //  printf ("a");
    if (k==0)
        return ;
    if (x<=lat/2 && y<=lat/2){
        // trebuie sa realizez oglindirea
        traseu (k-1,y,x);
    }
    else if (x<=lat/2 && y>lat/2){
        // trebuie sa realizez oglindirea
        sol=sol+3*linii[k-1]+3;
        y-=lat/2;
        traseu (k-1,lat/2-y+1,lat/2-x+1);
    }
    else if (x>lat/2 && y<=lat/2){
        // e deja in pozitie verticala
        sol=sol+linii[k-1]+1;
        traseu (k-1,x-lat/2,y);
    }
    else {
        // e deja in pozitie verticala
        sol=sol+2*linii[k-1]+2;
        traseu (k-1,x-lat/2,y-lat/2);
    }
}
int main()
{
    FILE *fin=fopen ("fractal.in","r");
    FILE *fout=fopen ("fractal.out","w");
    int k,x,y,i;
    fscanf (fin,"%d%d%d",&k,&y,&x);
    ko=k;
    linii[0]=0;
    for (i=1;i<=k;i++)
        linii[i]=4*linii[i-1]+3;
    traseu (k,x,y);
    fprintf (fout,"%d",sol);
    return 0;
}