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;
}

 

posted on 2016-05-26 10:32  _fukua  阅读(46236)  评论(0编辑  收藏  举报