Cod sursa(job #213000)

Utilizator cata00Catalin Francu cata00 Data 8 octombrie 2008 06:25:06
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <stdio.h>

int k, x, y;
int result;

void read() {
  FILE* f = fopen("fractal.in", "rt");
  fscanf(f, "%d %d %d", &k, &x, &y);
  x--; y--;
  fclose(f);
}

int antTrail(int k, int x, int y) {
  if (!k) {
    return 0;
  } else {
    int quadrant = (y >> (k - 1)) * 2 + (x >> (k - 1));
    int half = 1 << (k - 1);
    int qSize = half * half;
    switch (quadrant) {
    case 0: return antTrail(k - 1, y, x);
    case 1: return qSize * 3 + antTrail(k - 1, half - y - 1, 2 * half - x - 1);
    case 2: return qSize + antTrail(k - 1, x, y - half);
    case 3: return qSize * 2 + antTrail(k - 1, x - half, y - half);
    }
    return 0;
  }
}

void write() {
  FILE* f = fopen("fractal.out", "wt");
  fprintf(f, "%d\n", result);
  fclose(f);
}

int main() {
  read();
  result = antTrail(k, x, y);
  write();
  return 0;
}