codeforces 323A. Black-and-White Cube 构造
输入n
1 <= n <= 100
有一个n * n * n 的立方体,由n ^ 3 个1 * 1 * 1 的单位立方体构成
要用white 和 black 2种颜色来染这n ^ 3个立方体,要求:
白色的立方体恰好有2个相邻的白色立方体
黑色的立方体恰好有2个相邻的黑色立方体
无解的时候输出-1,有解的时候输出一种染色方案
solution:
n为奇数时,无解,输出 -1
n为偶数时,n = 2时的答案:
bb ww
bb ww
n > 2时,以n=2为中心向外面扩展,进行构造
如 n = 4时,:
wwww bbbb wwww bbbb
wbbw bwwb wbbw bwwb
wbbw bwwb wbbw bwwb
wwww bbbb bbbb bbbb
代码:
//File Name: cf323A.cpp //Author: long //Mail: 736726758@qq.com //Created Time: 2016年05月26日 星期四 10时05分30秒 #include <stdio.h> #include <string.h> #include <algorithm> #include <iostream> using namespace std; const int MAXN = 103; char ans[MAXN][MAXN]; char get(int x){ if(x == 1) return 'b'; return 'w'; } char get_c(char x){ if(x == 'w') return 'b'; return 'w'; } void update(int x,int y,char c){ for(int i=x;i<=y;i++){ ans[x][i] = c; ans[i][x] = c; ans[i][y] = c; ans[y][i] = c; } } bool solve(int n){ if(n % 2) return false; int now = 0; for(int i=1;i+i < n+1;i++){ update(i,n+1-i,get(now^=1)); } return true; } int main(){ int n; scanf("%d",&n); if(!solve(n)) puts("-1"); else{ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ for(int k=1;k<=n;k++){ if(i % 2) printf("%c",ans[j][k]); else printf("%c",get_c(ans[j][k])); } puts(""); } puts(""); } } return 0; }