Pagini recente » Cod sursa (job #1023822) | Cod sursa (job #171710) | Cod sursa (job #1376080) | Cod sursa (job #2612761) | Cod sursa (job #329928)
Cod sursa(job #329928)
#include <stdio.h>
int k, x, y, sol, xs, ys, xf, yf, d;
const int v[4][4]={0, 1, 3, 2, 2, 1, 3, 0, 0, 3, 1, 2, 2, 3, 1, 0};
/*
d==0 0 1
3 2
d==1 2 1
3 0
d==2 0 3
1 2
d==3 2 3
1 0
*/
void res(int lvl) {
int mx, my;
if (!lvl) return;
mx=(xs+xf)/2;
my=(ys+yf)/2;
if (x<=mx && y<=my) {
sol+=v[d][0]*(1<<(lvl-1))*(1<<(lvl-1));
xf=mx, yf=my;
if (!d) d=2;
else if (d==1) d=1;
else if (d==2) d=0;
else if (d==3) d=3;
res(lvl-1);
}
else if (x<=mx && y>my) {
sol+=v[d][1]*(1<<(lvl-1))*(1<<(lvl-1));
xf=mx, ys=my+1;
if (!d) d=0;
else if (d==1) d=1;
else if (d==2) d=3;
else if (d==3) d=2;
res(lvl-1);
}
else if (x>mx && y<=my) {
sol+=v[d][2]*(1<<(lvl-1))*(1<<(lvl-1));
xs=mx+1, yf=my;
if (!d) d=1;
else if (d==1) d=0;
else if (d==2) d=2;
else if (d==3) d=3;
res(lvl-1);
}
else {
sol+=v[d][3]*(1<<(lvl-1))*(1<<(lvl-1));
xs=mx+1, ys=my+1;
if (!d) d=0;
else if (d==1) d=3;
else if (d==2) d=2;
else if (d==3) d=1;
res(lvl-1);
}
}
int main() {
freopen("fractal.in", "r", stdin);
freopen("fractal.out", "w", stdout);
scanf("%d %d %d\n", &k, &x, &y);
xs=ys=1;
xf=yf=1<<k;
sol=d=0;
res(k);
printf("%d\n", sol);
return 0;
}