Cod sursa(job #2627468)

Utilizator cyg_vladioanBirsan Vlad cyg_vladioan Data 10 iunie 2020 22:42:28
Problema Fractal Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.15 kb
#include <cstdio>
using namespace std;
const int KMAX = 15;
int di[]= {0 , 0 , 0 , 1 , 1};
int dj[]= {0 , 1 , 0 , 0 , 1};
int p[KMAX + 5] , coef[10] , in[10] , out[10] , nr;
void get_coef(int i , int o)
{
    if(i == 2 && o == 1)
    {
        coef[1] = 3;
        coef[2] = 0;
        coef[3] = 1;
        coef[4] = 2;
        in[1] = 4;
        out[1] = 1;
        in[2] = 2;
        out[2] = 3;
        in[3] = 2;
        out[3] = 1;
        in[4] = 2;
        out[4] = 1;
    }
    else if(i == 2 && o == 3)
    {
        coef[1] = 1;
        coef[2] = 0;
        coef[3] = 3;
        coef[4] = 2;
        in[1] = 2;
        out[1] = 3;
        in[2] = 2;
        out[2] = 1;
        in[3] = 4;
        out[3] = 3;
        in[4] = 2;
        out[4] = 3;
    }
    else if(i == 4 && o == 1)
    {
        coef[1] = 3;
        coef[2] = 2;
        coef[3] = 1;
        coef[4] = 0;
        in[1] = 2;
        out[1] = 1;
        in[2] = 4;
        out[2] = 1;
        in[3] = 1;
        out[3] = 4;
        in[4] = 4;
        out[4] = 3;
    }
    else if(i == 4 && o == 3)
    {
        coef[1] = 1;
        coef[2] = 2;
        coef[3] = 3;
        coef[4] = 0;
        in[1] = 2;
        out[1] = 1;
        in[2] = 4;
        out[2] = 1;
        in[3] = 4;
        out[3] = 1;
        in[4] = 4;
        out[4] = 3;
    }
}
void fractal(int x , int y , int k , int i , int o)
{
    int cadran , pcadran;
    if(x <= p[k - 1] && y > p[k - 1])
        cadran = 1;
    else if(x <= p[k - 1] && y <= p[k - 1])
        cadran = 2;
    else if(x > p[k - 1] && y <= p[k - 1])
        cadran = 3;
    else
        cadran = 4;
    get_coef(i , o);
    nr = nr + coef[cadran] * p[k - 1] * p[k - 1];
    if(k > 1)
        fractal(x - p[k - 1] * di[cadran] , y - p[k - 1] * dj[cadran] , k - 1 , in[cadran] , out[cadran]);
}
int main()
{
    freopen("fractal.in" , "r" , stdin);
    freopen("fractal.out" , "w" , stdout);
    int x , y , k , i;
    scanf("%d%d%d" , &k , &y , &x);
    for(i = 0 ; i <= k ; i ++)
        p[i] = (1 << i);
    fractal(x , y , k , 2 , 1);
    printf("%d\n" , nr);
    return 0;
}