Pagini recente » Cod sursa (job #1476171) | Cod sursa (job #2726325) | Cod sursa (job #929266) | Cod sursa (job #737427) | Cod sursa (job #2627465)
#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] = 4;
out[1] = 3;
in[2] = 4;
out[2] = 3;
in[3] = 2;
out[3] = 3;
in[4] = 4;
out[4] = 1;
}
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;
}