You are given a cube of size k × k × k , which consists of unit cubes. Two unit cubes are considered neighbouring, if they have common face.
Your task is to paint each of k 3 unit cubes one of two colours (black or white), so that the following conditions must be satisfied:
- each white cube has exactly 2 neighbouring cubes of white color;
- each black cube has exactly 2 neighbouring cubes of black color.
The first line contains integer k (1 ≤ k ≤ 100) , which is size of the cube.
Print -1 if there is no solution. Otherwise, print the required painting of the cube consequently by layers. Print a k × k matrix in the first k lines, showing how the first layer of the cube should be painted. In the following k lines print a k × k matrix — the way the second layer should be painted. And so on to the last k -th layer. Note that orientation of the cube in the space does not matter.
Mark a white unit cube with symbol " w " and a black one with " b ". Use the format of output data, given in the test samples. You may print extra empty lines, they will be ignored.
1
-1
2
bb ww bb ww
题目意思,输出一个k*k*k的立体模型,使每个b的旁边有2个b,每个k的旁边有2个k
题解:
题目说的输出描述有点问题,它说的是先输出你的第1层,再输出k层从1到k的你的模型。实际上只用输出你构造的模型的1-k层。
这里提供两种构造方法
第1种
bbwwbb
bbwwbb
wwbbww
wwbbww
bbwwbb
bbwwbb
这种就是4个4个的。。以后每层就把上一层取反就OK了
还有一种是
bbbbbb
bwwwwb
bwbbwb
bwbbwb
bwwwwb
bbbbbb
类似这种不断将最外层围起来的构造方式,同理,以后的每层就把上一层取反就OK了。。
构造方法不唯一的。
至于 k 为奇数时无解我无法证明这个。。。
/* * @author ipqhjjybj * @date 20130709 * */ #include <cstdio> #include <cstdlib> int main(){ int k; scanf("%d",&k); if(k&1) { puts("-1"); return 0; } for(int i=0;i<k;i++){ for(int j=0;j<k;j++){ for(int z=0;z<k;z++){ putchar(((j>>1)&1)^((z>>1)&1)^(i&1)?'w':'b'); } putchar('\n'); } putchar('\n'); } return 0; }