Cod sursa(job #2375019)

Utilizator alexghitaAlexandru Ghita alexghita Data 7 martie 2019 21:51:15
Problema Fractal Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <bits/stdc++.h>

using namespace std;

int power(int b, int e) {
  int result = 1;

  while (e) {
    result *= b;
    e--;
  }
  return result;
}

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

  int quad_size = power(2, k - 1);
  int quad_steps = quad_size * quad_size;

  if (x <= quad_size && y <= quad_size) {
    return solve(k - 1, y, x);
  } else if (x <= quad_size && y > quad_size) {
    return solve(k - 1, x, y - quad_size) + quad_steps;
  } else if (x > quad_size && y > quad_size) {
    return solve(k - 1, x - quad_size, y - quad_size) + 2 * quad_steps;
  } else {
    return solve(k - 1, quad_size + 1 - y, quad_size + 1 - x + quad_size)
      + 3 * quad_steps;
  }
}

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

  int k, x, y;
  int steps;

  cin >> k >> x >> y;
  steps = solve(k, x, y);

  cout << steps;
}