Cod sursa(job #930130)

Utilizator rudarelLup Ionut rudarel Data 27 martie 2013 14:17:41
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
 
int distk1[3][3] = {
    {0,0,0},
    {0,0,1},
    {0,3,2}
};
 
int main()
{
    FILE* fin = fopen("fractal.in", "r");
    FILE* fout = fopen("fractal.out", "w");
 
    int k, x, y;
    fscanf(fin, "%d %d %d", &k, &x, &y);
 
    int steps = 0;
    int lenk = pow((long double)2,k);
 
    while (k > 1)
    {
        int mid = lenk / 2;
        int block = 0;
        if (x <= mid && y <= mid)
        {
            block = 1;
            int tmp = x;
            x = y;
            y = tmp;
        }
        else if (x <= mid && y > mid)
        {
            block = 2;
            y -= mid;
        }
        else if (x > mid && y > mid)
        {
            block = 3;
            y -= mid;
            x -= mid;
        }
        else
        {
            block = 4;
            x -= mid;
            x = mid - x + 1;
            y = mid - y + 1;
            int tmp = x;
            x = y;
            y = tmp;
        }
 
        steps += (block - 1) * (mid * mid - 1) + (block - 1);
 
        lenk = mid;
        k--;
    }
 
    steps += distk1[x][y];
 
    fprintf(fout, "%d", steps);
 
    fclose(fin);
    fclose(fout);
}