Cod sursa(job #163534)

Utilizator alecmanAchim Ioan Alexandru alecman Data 22 martie 2008 14:44:14
Problema Fractal Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include<stdio.h>

#define INPUT "fractal.in"
#define OUTPUT "fractal.out"

FILE *fin = fopen(INPUT, "r"), *fout = fopen(OUTPUT, "w");

int ordin, pozX, pozY;

void readValues();

long long solveFunction(int, int, int);

int main()
{
  readValues();

  fprintf(fout, "%lld\n", solveFunction(ordin, pozY, pozX));

  fclose(fin);
  fclose(fout);

  return 0;
}

void readValues()
{
  fscanf(fin, "%d %d %d", &ordin, &pozX, &pozY);
}

long long solveFunction(int ordin, int X, int Y)
{
  int ordinCur = 1 << ordin;
  int jumOrd = ordinCur / 2;

  if(ordin==1)
  {
    if(X == 1 && Y == 1) return 0;
    if(X == 2 && Y == 1) return 1;
    if(X == 2 && Y == 2) return 2;
    if(X == 1 && Y == 2) return 3;
  }

  if(X <= ordinCur / 2 && Y <= ordinCur / 2)
  {
    return (jumOrd * jumOrd - 1 - solveFunction(ordin - 1, Y, jumOrd - X + 1));
  }
  else
  if(X > ordinCur / 2 && Y <= ordinCur / 2)
  {
    return (jumOrd * jumOrd + solveFunction(ordin-1, X, Y - jumOrd));
  }
  else
  if(X <= ordinCur / 2 && Y > ordinCur / 2)
  {
    return ((jumOrd * jumOrd - 1)* 4 + 3 - solveFunction(ordin-1, 2*jumOrd - Y + 1, X));
  }
  else
  if(X > ordinCur / 2 && Y > ordinCur / 2)
  {
    return ((jumOrd * jumOrd -1 )* 2 + 2 + solveFunction(ordin-1, X - jumOrd, Y - jumOrd));
  }
}