Cod sursa(job #2347220)

Utilizator claudiu.gatinaFMI Claudiu Gatina claudiu.gatina Data 18 februarie 2019 16:50:29
Problema Fractal Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <iostream>
#include <cstdio>
#include <cmath>

using namespace std;

int power[32];

int pos1(int x, int y)
{
  if(x == 1)
  {
    if(y == 1)
      return 0;
    if(y == 2)
      return 1;
  }
  else
  {
    if(y == 2)
      return 2;
    if(y == 1)
      return 3;
  }
}

int pos(int k, int x, int y)
{
  if(k == 1)
    return pos1(x, y);
  if(x <= power[k - 1] && y <= power[k - 1])
    return pos(k - 1, y, x);
  if(x > power[k - 1] && y <= power[k - 1])
    return power[2 * k] - 1 - pos(k - 1, y, power[k] - x + 1);
  if(x <= power[k - 1] && y > power[k - 1])
    return power[2 * k - 2] + pos(k - 1, x, y - power[k - 1]);
  if(x > power[k - 1] && y > power[k - 1])
    return power[2 * k - 1] + pos(k - 1, x - power[k - 1], y - power[k - 1]);
}

void init()
{
  power[0] = 1;
  for(int i = 1; i < 32; ++i)
    power[i] = 2 * power[i - 1];
}

int main()
{
  freopen("fractal.in", "r", stdin);
  freopen("fractal.out", "w", stdout);

  int k, x, y;
  cin >> k >> x >> y;

  init();

  cout << pos(k, x, y);

  return 0;
}