Cod sursa(job #2739658)

Utilizator C_DanyConstantin Daniel C_Dany Data 9 aprilie 2021 10:41:01
Problema Fractal Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <iostream>
#include<fstream>
#define swap(a,b) {a+=b; b=a-b; a=a-b;}
using namespace std;
ifstream INPUT("fractal.in");
ofstream OUTPUT("fractal.out");
long long S=0, k, Lines=0, Center=1;
int Cadran,x,y;
int fr[64];
  void getCadran()
  {
      if(x<=Center)
      {
        if(y<=Center)
            Cadran=1;
          else
            Cadran=4;
      }
      else
        if(y<=Center)
            Cadran=2;
          else
            Cadran=3;

  }

 void  getNewCoordinates()
  {
      switch(Cadran)
      {
       case 1:
         swap(x,y);
         break;

       case 2:
        x-=Center;
        break;

       case 3:
        x-=Center;
        y-=Center;
        break;

       case 4:
        y-=Center;
        if(x+y!=Center+1)
        {
            x=Center-x+1;
            y=Center-y+1;
            swap(x,y);
        }
        break;
      }

      Center/=2;
  }

int main()
{

   INPUT>>k>>y>>x;

   for(int i=1;i<k;i++)
    {
        Lines = Lines*4+3;
        Center*=2;
    }

   while(k!=1)
   {

     getCadran();
     S+=(Lines+1)*(Cadran-1);

     getNewCoordinates();

     Lines/=4;
     k--;
   }

   switch(x)
   {
   case 1:
       if(y==1)
        S+=0;
       else
        S+=3;
    break;

   case 2:
    if(y==1)
        S+=1;
     else
        S+=2;
    break;
   }

   OUTPUT<<S;


   INPUT.close();
   OUTPUT.close();
return 0;
}