Cod sursa(job #73346)

Utilizator floringh06Florin Ghesu floringh06 Data 17 iulie 2007 23:07:58
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<stdio.h>
#include<math.h>
#include<fstream>

using namespace std;

int main()
{

 freopen("fractal.in","r",stdin);
 int k,x,y;
 scanf("%d %d %d",&k,&x,&y);
 int a[6][6];
 a[1][1]=1; a[1][2]=1; a[1][3]=1; a[1][4]=3;
 a[2][1]=4; a[2][2]=2; a[2][3]=2; a[2][4]=2;
 a[3][1]=3; a[3][2]=3; a[3][3]=3; a[3][4]=1;
 a[4][1]=2; a[4][2]=4; a[4][3]=4; a[4][4]=4;

int s[6],mx,my,q,i,v;
s[1]=1;s[2]=4;s[3]=2;s[4]=3;
int pasi=0;

int lix=0,liy=0,lfx=(int)pow(2.0,k),lfy=(int)pow(2.0,k);
while(k)
  {
  mx=(lfx+lix)/2;
  my=(lfy+liy)/2;

  if(x<=mx&&y<=my)
     {
     q=1;
     lfx=mx;
     lfy=my;
     }
  else
  if(x<=mx&&y>my)
     {
     q=3;
     lfx=mx;
     liy=my;
     }
  else
  if(x>mx&&y<=my)
     {
     q=2;
     lix=mx;
     lfy=my;
     }
  else
  if(x>mx&&y>my)
     {
     q=4;
     lix=mx;
     liy=my;
     }

  pasi+=(int)pow(2.0,2*(k-1))*(s[q]-1);
  v=s[q];
  for(i=1;i<=4;i++)
     s[i]=a[s[i]][v];
  k--;
  }

freopen("fractal.out","w",stdout);
printf("%d",pasi);

return 0;
}