zoukankan      html  css  js  c++  java
  • cf 323A A. Black-and-White Cube 立体构造 不知道为什么当k为奇数时构造不出来 挺有趣的题目吧

    A. Black-and-White Cube
    time limit per test
    1 second
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    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 k3 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.
    Input

    The first line contains integer k (1 ≤ k ≤ 100), which is size of the cube.

    Output

    Print -1 if there is no solution. Otherwise, print the required painting of the cube consequently by layers. Print ak × k matrix in the firstk lines, showing how the first layer of the cube should be painted. In the followingk lines print ak × k matrix — the way the second layer should be painted. And so on to the lastk-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.

    Sample test(s)
    Input
    1
    
    Output
    -1
    
    Input
    2
    
    Output
    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('
    ');
            }
            putchar('
    ');
        }
        return 0;
    }
    


  • 相关阅读:
    ubuntu16.04服务自启动(弹控制台)
    第十集 爱在天路唐古拉,青藏梦止长江源
    第九集 生死穿越风火山,感受尘世间轮回
    第八集 昆仑初度尘未洗,夜宿禁区五道梁
    第七集 久历风尘凡间路,终见西域玉珠峰
    第六集 飞沙走石共患难,夜扎昆仑饮圣泉
    第五集 插肩而过茶卡湖,朝发夕至格尔木
    辞职之后在家的挣扎与老爸的工作
    2018,怎么这么难,我该怎么办,我的ai和感情
    17年11月兄弟小聚
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3181855.html
Copyright © 2011-2022 走看看