codeforces A. Black-and-White Cube 解题报告

题目链接:http://codeforces.com/problemset/problem/323/A

题目意思:给定值 k ,需要输出 k 个 k 行 k 列的单位立方体各表示什么颜色(或者是黑色或者是白色)。需要满足的条件是:如果是白色的单位立方体,那么它有且仅有2个白色的相邻单位立方体;如果是黑色的单位立方体,那么它有且仅有2个黑色的相邻单位立方体。要是给出的k不能构成满足这些条件的立方体,输出-1.

      在纸上尝试过用次小的奇数 3 来模拟,发现无论如何都不能满足条件,于是大胆地猜测k是奇数的话是不行的。至于证明就...无能为力啊~希望会的读者能够指点迷津,不胜感激。

      而偶数的话,为了简单起见,姑且用 k = 4 来说:

      第 1 块和第 2 块:

   codeforces   A. Black-and-White Cube   解题报告

     至于第3块和第4块是和前面的两块是相同的。当然1,2块可以交换,但此时3,4块也要交换。至于其他的6,8,....2n都可以这样推。反正对于每一行,如果第1,2列输出的是 b ,那么下次的第5,6列页数输出 b。也就是说会相隔2个空格(这2个空格当然就是输出w了)。

     本人觉得这样的解决方法比较简单,不必费太多的脑筋。读者如果有什么更好的办法,欢迎多多交流。

   

codeforces   A. Black-and-White Cube   解题报告
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int k, i, j, l;
 9     while (scanf("%d", &k) != EOF)
10     {
11         if (k & 1)
12             puts("-1");
13         else
14         {
15             for (l = 1; l <= k; l++)            //
16             {  
17                 if (l & 1)
18                 {
19                     for (i = 1; i <= k; i++)        //
20                     {
21                         for (j = 1; j <= k/2; j++)  //
22                         {
23                             if (j & 1 && (i % 4 == 1 || i % 4 == 2))
24                                 printf("bb");
25                             else if (!(j & 1) && (i % 4 == 1 || i % 4 == 2))
26                                 printf("ww");
27                             else if (j & 1 && !(i % 4 == 1 || i % 4 == 2))
28                                 printf("ww");
29                             else
30                                 printf("bb");
31                         }
32                         printf("\n");
33                     }
34                 }
35                 else
36                 {    
37                     for (i = 1; i <= k; i++)        //
38                     {
39                         for (j = 1; j <= k/2; j++)  //
40                         {
41                             if (j & 1 && (i % 4 == 1 || i % 4 == 2))
42                                 printf("ww");
43                             else if (!(j & 1) && (i % 4 == 1 || i % 4 == 2))
44                                 printf("bb");
45                             else if (j & 1 && !(i % 4 == 1 || i % 4 == 2))
46                                 printf("bb");
47                             else
48                                 printf("ww");
49                         }
50                         printf("\n");
51                     }                
52                 }
53                 printf("\n");
54             }
55         }
56     }
57     return 0;
58 }
59 
60 
61     
codeforces   A. Black-and-White Cube   解题报告

codeforces A. Black-and-White Cube 解题报告

上一篇:visualSFM的使用方法


下一篇:c# 日期函数[string.Format----GetDateTimeFormats]格式 .【转帖备查】