首页 > ACM题库 > HDU-杭电 > hdu 3604 The N cubes puzzle待解决[解题报告]C++
2014
11-27

hdu 3604 The N cubes puzzle待解决[解题报告]C++

The N cubes puzzle

问题描述 :

Given n cubes 1*1*1 (x, y, z) and n types of pigments . You can choose any one of the n pigments to paint every face of these cubes as you want. To save space, we’d like you to stack these n cubes vertically into a 1*1*n cube. What’s more, to make it as much beautiful as possible, we demand you to find a painting way to make sure that all the vertical faces of the resulting cube are covered by n colors.
For example, such as n = 4, a cube’s expand map just as sample 1-1 ;and the stacked cube’s expand map just as sample 1-2;
Coach Yehr’s punishment    Coach Yehr’s punishment

输入:

The first line is an integer T (1<=T<=500) indicating the number of test cases.
Each test case begins with an integer n (1<=n<=10), which stands for the number of cubes. Then, the following 3 * n lines each contains a string which only consists of capital letters between ‘A’ and ‘A’ + n – 1 (colors of the pigments, 1<=n<=10). Pay attention, each cube occupies 3 lines describing its expanded map.

输出:

The first line is an integer T (1<=T<=500) indicating the number of test cases.
Each test case begins with an integer n (1<=n<=10), which stands for the number of cubes. Then, the following 3 * n lines each contains a string which only consists of capital letters between ‘A’ and ‘A’ + n – 1 (colors of the pigments, 1<=n<=10). Pay attention, each cube occupies 3 lines describing its expanded map.

样例输入:

3
2
 A
BBAA
 B
 B
ABBA
 A 
3
 A
ABAB
 B
 C
AACB
 C
 C
ABBC
 C
4
 A
ADCB
 A
 A
ADBC
 D
 C
BBAD
 C
 B
CDAC
 D

样例输出:

Case #1: Yes
Case #2: No
Case #3: Yes


  1. 换句话说,A[k/2-1]不可能大于两数组合并之后的第k小值,所以我们可以将其抛弃。
    应该是,不可能小于合并后的第K小值吧

  2. #include <stdio.h>
    int main()
    {
    int n,p,t[100]={1};
    for(int i=1;i<100;i++)
    t =i;
    while(scanf("%d",&n)&&n!=0){
    if(n==1)
    printf("Printing order for 1 pages:nSheet 1, front: Blank, 1n");
    else {
    if(n%4) p=n/4+1;
    else p=n/4;
    int q=4*p;
    printf("Printing order for %d pages:n",n);
    for(int i=0;i<p;i++){
    printf("Sheet %d, front: ",i+1);
    if(q>n) {printf("Blank, %dn",t[2*i+1]);}
    else {printf("%d, %dn",q,t[2*i+1]);}
    q–;//打印表前
    printf("Sheet %d, back : ",i+1);
    if(q>n) {printf("%d, Blankn",t[2*i+2]);}
    else {printf("%d, %dn",t[2*i+2],q);}
    q–;//打印表后
    }
    }
    }
    return 0;
    }