Cod sursa(job #1739248)

Utilizator adina0822Ciubotaru Adina-Maria adina0822 Data 9 august 2016 00:42:41
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.49 kb
using namespace std;
#include<fstream>

ifstream f("fractal.in");
ofstream g("fractal.out");

int nr=0;

// pozitia 1 - desenul (curba) orientat(a) in jos
// pozitia 2 - desenul orientat spre stanga
// pozitia 3 - desenul orientat spre dreapta
// pozitia 4 - desenul orientat in sus

void sub(int pow, int x, int y, int poz)
{
    int add=pow*pow/4;
    if(pow>1)
    {
        if(x>pow/2)
        {
            if(y<=pow/2) // cadranul din dreapta sus
            {



                    if(poz==1)
                    {
                        nr+=3*add;
                        poz=2;
                    }

                    else if(poz==3)
                    {
                        nr+=add;
                        poz=3;
                    }
                    else if(poz==4)
                    {
                        nr+=add;
                        poz=4;
                    }
                    else
                    {
                        nr+=3*add;
                        poz=1;
                    }

                x-=pow/2;

            }
            else //cadranul din dreapata jos
            {

                if(poz==1) nr+=2*add;

                else if (poz==3)
                {
                    nr+=2*add;
                    poz=3;

                }
                else if(poz==2) poz=4;
                else poz=2;


                 x-=pow/2;
                 y-=pow/2;

            }

        }
        else
          if(y>pow/2) //cadranul din stanga jos
          {
              if(poz==1) nr+=add;
              else if(poz==2)
              {
                  nr+=add;
                  poz=2;

              }
              else if(poz==3)
              {
                  nr+=3*add;
                  poz=4;
              }
              else
              {
                  nr+=3*add;
                  poz=3;

              }

              y-=pow/2;
          }
          else //cadranul din stanga sus
          {
              if(poz==2 || poz==4) nr+=2*add;
              else if(poz==1) poz=3;
              else poz=1;

          }

        sub(pow/2,x,y,poz);
    }
    else
    {

        if(x==1 && y==2) nr++;
        else if (x==2 && y==2) nr+=2;
        else if (x==2 && y==1) nr+=3;
    }
}

int main()
{
    int k,x,y,i,pow=1;

    f>>k>>x>>y;

    for(i=1; i<=k; i++) pow*=2;


    sub(pow,x,y,1);
    g<<nr;







    return 0;
}