## a bit slower but cc = 3 ```clike= #include<stdio.h> void f(int l, int hx, int hy, int hz, int x, int y, int z, int ty[2][2][2]){ if(l <= 0) return; int xx = (x - hx <= 0), yy = (y - hy <= 0), zz = (z - hz <= 0); int t = ty[xx][yy][zz]; printf("%d %d %d %d\n", t, x, y, z); int dx[8] = {1, -1, 1, -1, 1, -1, 1, -1}; int dy[8] = {1, 1, -1, -1, 1, 1, -1, -1}; int dz[8] = {1, 1, 1, 1, -1, -1, -1, -1}; int hdx[8] = {0, -1, 0, -1, 0, -1, 0, -1}; int hdy[8] = {0, 0, -1, -1, 0, 0, -1, -1}; int hdz[8] = {0, 0, 0, 0, -1, -1, -1, -1}; int nl = l / 2; for(int i = 0; i < 8; i++){ if(t - 1 == i){ f(nl, hx, hy, hz, x + dx[i] * nl, y + dy[i] * nl, z + dz[i] * nl, ty); } else{ f(nl, x + hdx[i], y + hdy[i], z + hdz[i], x + dx[i] * nl, y + dy[i] * nl, z + dz[i] * nl, ty); } } return; } int main(){ int l, hx, hy, hz; scanf("%d%d%d%d", &l, &hx, &hy, &hz); int ty[2][2][2]; ty[1][1][1] = 1, ty[0][1][1] = 2, ty[0][0][1] = 4, ty[1][0][1] = 3; ty[1][1][0] = 5, ty[0][1][0] = 6, ty[0][0][0] = 8, ty[1][0][0] = 7; f(l / 2, hx, hy, hz, l / 2, l / 2, l / 2, ty); } ``` ## fast but cc = 9 ```clike= #include<stdio.h> void f(int l, int hx, int hy, int hz, int x, int y, int z){ if(l == 1) return; l /= 2; if(hx < x + l && hy < y + l && hz < z + l){ printf("8 %d %d %d\n", x + l, y + l, z + l); f(l, hx, hy, hz, x, y, z); } else f(l, x + l - 1, y + l - 1, z + l - 1, x, y, z); if(hx < x + l && hy >= y + l && hz < z + l){ printf("6 %d %d %d\n", x + l, y + l, z + l); f(l, hx, hy, hz, x, y + l, z); } else f(l, x + l - 1, y + l, z + l - 1, x, y + l, z); if(hx >= x + l && hy < y + l && hz < z + l){ printf("7 %d %d %d\n", x + l, y + l, z + l); f(l, hx, hy, hz, x + l, y, z); } else f(l, x + l, y + l - 1, z + l - 1, x + l, y, z); if(hx >= x + l && hy >= y + l && hz < z + l){ printf("5 %d %d %d\n", x + l, y + l, z + l); f(l, hx, hy, hz, x + l, y + l, z); } else f(l, x + l, y + l, z + l - 1, x + l, y + l, z); if(hx < x + l && hy < y + l && hz >= z + l){ printf("4 %d %d %d\n", x + l, y + l, z + l); f(l, hx, hy, hz, x, y, z + l); } else f(l, x + l - 1, y + l - 1, z + l, x, y, z + l); if(hx < x + l && hy >= y + l && hz >= z + l){ printf("2 %d %d %d\n", x + l, y + l, z + l); f(l, hx, hy, hz, x, y + l, z + l); } else f(l, x + l - 1, y + l, z + l, x, y + l, z + l); if(hx >= x + l && hy < y + l && hz >= z + l){ printf("3 %d %d %d\n", x + l, y + l, z + l); f(l, hx, hy, hz, x + l, y, z + l); } else f(l, x + l, y + l - 1, z + l, x + l, y, z + l); if(hx >= x + l && hy >= y + l && hz >= z + l){ printf("1 %d %d %d\n", x + l, y + l, z + l); f(l, hx, hy, hz, x + l, y + l, z + l); } else f(l, x + l, y + l, z + l, x + l, y + l, z + l); return; } int main(){ int l, hx, hy, hz; scanf("%d%d%d%d", &l, &hx, &hy, &hz); f(l, hx, hy, hz, 0, 0, 0); } ```