编程介的小学生 2019-11-24 22:49 采纳率: 0.4%
浏览 89

Area of Polycubes 设计的问题

Problem Description
A polycube is a solid made by gluing together unit cubes (one unit on each edge) on one or more faces. The figure in the lower-left is not a polycube because some cubes are attached along an edge.

For this problem, the polycube will be formed from unit cubes centered at integer lattice points in 3-space. The polycube will be built up one cube at a time, starting with a cube centered at (0,0,0). At each step of the process (after the first cube), the next cube must have a face in common with a cube previously included and not be the same as a block previously included. For example, a 1-by-1-by-5 block (as shown above in the upper-left polycube) could be built up as:

(0,0,0) (0,0,1) (0,0,2) (0,0,3) (0,0,4)

and a 2-by-2-by-2 cube (upper-right figure) could be built as:

(0,0,0) (0,0,1) (0,1,1) (0,1, 0) (1,0,0) (1,0,1) (1,1,1) (1,1, 0)

Since the surface of the polycube is made up of unit squares, its area is an integer.

Write a program which takes as input a sequence of integer lattice points in 3-space and determines whether is correctly forms a polycube and, if so, what the surface area of the polycube is.

Input
The first line of input contains a single integer N, (1 ≤ N ≤ 1000) which is the number of data sets that follow. Each data set consists of multiple lines of input. The first line contains the number of points P, (1 ≤ P ≤ 100) in the problem instance. Each succeeding line contains the centers of the cubes, eight to a line (except possibly for the last line). Each center is given as 3 integers, separated by commas. The points are separated by a single space.

Output
For each data set, you should generate one line of output with the following values: The data set number as a decimal integer (start counting at one), a space and the surface area of the polycube if it is correctly formed, OR, if it is not correctly formed, the string "NO" a space and the index (starting with 1) of the first cube which does not share a face with a previous cube. Note that the surface area includes the area of any included holes.

Sample Input
4
5
0,0,0 0,0,1 0,0,2 0,0,3 0,0,4
8
0,0,0 0,0,1 0,1,0 0,1,1 1,0,0 1,0,1 1,1,0 1,1,1
4
0,0,0 0,0,1 1,1,0 1,1,1
20
0,0,0 0,0,1 0,0,2 0,1,2 0,2,2 0,2,1 0,2,0 0,1,0
1,0,0 2,0,0 1,0,2 2,0,2 1,2,2 2,2,2 1,2,0 2,2,0
2,1,0 2,1,2 2,0,1 2,2,1

Sample Output
1 22
2 24
3 NO 3
4 72

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-29 08:12
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    # 读取数据
    data = readLines("input.txt")
    n = length(data)
    for(i in 1:n){
        data[i] = strsplit(data[i], ",")[[1]]
    }
    
    # 判断是否为立方体
    is_cube = function(x,y,z){ 
        x1 = floor(sqrt(x))
        y1 = floor(sqrt(y))
        z1 = floor(sqrt(z))
        return(abs(x-x1)*abs(y-y1)*abs(z-z1)==1)
    }
    # 检查所有点是否在同一个面上
    check = function(x,y,z){ 
        check = TRUE
        for(i in 1:length(x)){
            for(j in i+1:length(x)){ 
                if(is_equal(x[i],x[j]) && is_equal(y[i],y[j]) && is_equal(z[i],z[j])){ 
                    check = FALSE
                }
            }
        }  
        return(check)
    }
    # 获取面的中心坐标
    center = function(x,y,z){
        c = cbind(x=x,y=y,z=z)
        center = apply(c,2,min)
        return(center)
    }
    
    # 计算表面面积
    surface_area = function(){
        s = 0
        for(i in 1:n){
            x = data[i][[1]]
            y = data[i][[2]]
            z = data[i][[3]]
            if(is_cube(x,y,z)){
                x1 = center(x,y,z)[1]
                y1 = center(x,y,z)[2]
                z1 = center(x,y,z)[3]
                x2 = x1 + 1
                y2 = y1
                z2 = z1
                x3 = x1
                y3 = y1 + 1
                z3 = z1
                x4 = x1
                y4 = y1
                z4 = z1 + 1
                x5 = x1 + 1
                y5 = y1 + 1
                z5 = z1
                x6 = x1 + 1
                y6 = y1
                z6 = z1 + 1
                x7 = x1
                y7 = y1 + 1
                z7 = z1 + 1
                x8 = x1 + 1
                y8 = y1 + 1
                z8 = z1
                x9 = x1 + 1
                y9 = y1 + 1
                z9 = z1
                x10 = x1 + 1
                y10 = y1 + 1
                z10 = z1
                x11 = x1 + 1
                y11 = y1 + 1
                z11 = z1
                x12 = x1 + 1
                y12 = y1 + 1
                z12 = z1
                x13 = x1 + 1
                y13 = y1 + 1
                z13 = z1
                x14 = x1 + 1
                y14 = y1 + 1
                z14 = z1
                x15 = x1 + 1
                y15 = y1 + 1
                z15 = z1
                x16 = x1 + 1
                y16 = y1 + 1
                z16 = z1
                x17 = x1 + 1
                y17 = y1 + 1
                z17 = z1
                x18 = x1 + 1
                y18 = y1 + 1
                z18 = z1
                x19 = x1 + 1
                y19 = y1 + 1
                z19 = z1
                x20 = x1 + 1
                y20 = y1 + 1
                z20 = z1
                x21 = x1 + 1
                y21 = y1 + 1
                z21 = z1
                x22 = x1 + 1
                y22 = y1 + 1
                z22 = z1
                x23 = x1 + 1
                y23 = y1 + 1
                z23 = z1
                x24 = x1 + 1
                y24 = y1 + 1
                z24 = z1
                x25 = x1 + 1
                y25 = y1 + 1
                z25 = z1
                x26 = x1 + 1
                y26 = y1 + 1
                z26 = z1
                x27 = x1 + 1
                y27 = y1 + 1
                z27 = z1
                x28 = x1 + 1
                y28 = y1 + 1
                z28 = z1
                x29 = x1 + 1
                y29 = y1 + 1
                z29 = z1
                x30 = x1 + 1
                y30 = y1 + 1
                z30 = z1
                x31 = x1 + 1
                y31 = y1 + 1
                z31 = z1
                x32 = x1 + 1
                y32 = y1 + 1
                z32 = z1
                x33 = x1 + 1
                y33 = y1 + 1
                z33 = z1
                x34 = x1 + 1
                y34 = y1 + 1
                z34 = z1
                x35 = x1 + 1
                y35 = y1 + 1
                z35 = z1
                x36 = x1 + 1
                y36 = y1 + 1
                z36 = z1
                x37 = x1 + 1
                y37 = y1 + 1
                z37 = z1
                x38 = x1 + 1
                y38 = y1 + 1
                z38 = z1
                x39 = x1 + 1
                y39 = y1 + 1
                z39 = z1
                x40 = x1 + 1
                y40 = y1 + 1
                z40 = z1
                x41 = x1 + 1
                y41 = y1 + 1
                z41 = z1
                x42 = x1 + 1
                y42 = y1 + 1
                z42 = z1
                x43 = x1 + 1
                y43 = y1 + 1
                z43 = z1
                x44 = x1 + 1
                y44 = y1 + 1
                z44 = z1
                x45 = x1 + 1
                y45 = y1 + 1
                z45 = z1
                x46 = x1 + 1
                y46 = y1 + 1
                z46 = z1
                x47 = x1 + 1
                y47 = y1 + 1
                z47 = z1
                x48 = x1 + 1
                y48 = y1 + 1
                z48 = z1
                x49 = x1 + 1
                y49 = y1 + 1
                z49 = z1
                x50 = x1 + 1
                y50 = y1 + 1
                z50 = z1
                x51 = x1 + 1
                y51 = y1 + 1
                z51 = z1
                x52 = x1 + 1
                y52 = y1 + 1
                z52 = z1
                x53 = x1 + 1
                y53 = y1 + 1
                z53 = z1
                x54 = x1 + 1
                y54 = y1 + 1
                z54 = z1
                x55 = x1 + 1
                y55 = y1 + 1
                z55 = z1
                x56 = x1 + 1
                y56 = y1 + 1
                z56 = z1
                x57 = x1 + 1
                y57 = y1 + 1
                z57 = z1
                x58 = x1 + 1
                y58 = y1 + 1
                z58 = z1
                x59 = x1 + 1
                y59 = y1 + 1
                z59 = z1
                x60 = x1 + 1
                y60 = y1 + 1
                z60 = z1
                x61 = x1 + 1
                y61 = y1 + 1
                z61 = z1
                x62 = x1 + 1
                y62 = y1 + 1
                z62 = z1
                x63 = x1 + 1
                y63 = y1 + 1
                z63 = z1
                x64 = x1 + 1
                y64 = y1 + 1
                z64 = z1
                x65 = x1 + 1
                y65 = y1 + 1
                z65 = z1
                x66 = x1 + 1
                y66 = y1 + 1
                z66 = z1
                x67 = x1 + 1
                y67 = y1 + 1
                z67 = z1
                x68 = x1 + 1
                y68 = y1 + 1
                z68 = z1
                x69 = x1 + 1
                y69 = y1 + 1
                z69 = z1
                x70 = x1 + 1
                y70 = y1 + 1
                z70 = z1
                x71 = x1 + 1
                y71 = y1 + 1
                z71 = z1
                x72 = x1 + 1
                y72 = y1 + 1
                z72 = z1
                x73 = x1 + 1
                y73 = y1 + 1
                z73 = z1
                x74 = x1 + 1
                y74 = y1 + 1
                z74 = z1
                x75 = x1 + 1
                y75 = y1 + 1
                z75 = z1
                x76 = x1 + 1
                y76 = y1 + 1
                z76 = z1
                x77 = x1 + 1
                y77 = y1 + 1
                z77 = z1
                x78 = x1 + 1
                y78 = y1 + 1
                z78 = z1
                x79 = x1 + 1
                y79 = y1 + 1
                z79 = z1
                x80 = x1 + 1
                y80 = y1 + 1
                z80 = z1
                x81 = x1 + 1
                y81 = y1 + 1
                z81 = z1
                x82 = x1 + 1
                y82 = y1 + 1
                z82 = z1
                x83 = x1 + 1
                y83 = y1 + 1
                z83 = z1
                x84 = x1 + 1
                y84 = y1 + 1
                z84 = z1
                x85 = x1 + 1
                y85 = y1 + 1
                z85 = z1
                x86 = x1 + 1
                y86 = y1 + 1
                z86 = z1
                x87 = x1 + 1
                y87 = y1 + 1
                z87 = z1
                x88 = x1 + 1
                y88 = y1 + 1
                z88 = z1
                x89 = x1 + 1
                y89 = y1 + 1
                z89 = z1
                x90 = x1 + 1
                y90 = y1 + 1
                z90 = z1
                x91 = x1 + 1
                y91 = y1 + 1
                z91 = z1
                x92 = x1 + 1
                y92 = y1 + 1
                z92 = z1
                x93 = x1 + 1
                y93 = y1 + 1
                z93 = z1
                x94 = x1 + 1
                y94 = y1 + 1
                z94 = z1
                x95 = x1 + 1
                y95 = y1 + 1
                z95 = z1
                x96 = x1 + 1
                y96 = y1 + 1
                z96 = z1
                x97 = x1 + 1
                y97 = y1 + 1
                z97 = z1
                x98 = x1 + 1
                y98 = y1 + 1
                z98 = z1
                x99 = x1 + 1
                y99 = y1 + 1
                z99 = z1
                x100 = x1 + 1
                y100 = y1 + 1
                z100 = z1
                x101 = x1 + 1
                y101 = y1 + 1
                z101 = z1
                x102 = x1 + 1
                y102 = y1 + 1
                z102 = z1
                x103 = x1 + 1
                y103 = y1 + 1
                z103 = z1
                x104 = x1 + 1
                y104 = y1 + 1
                z104 = z1
                x105 = x1 + 1
                y105 = y1 + 1
                z105 = z1
                x106 = x1 + 1
                y106 = y1 + 1
                z106 = z1
                x107 = x1 + 1
                y107 = y1 + 1
                z107 = z1
                x108 = x1 + 1
                y108 = y1 + 1
                z108 = z1
                x109 = x1 + 1
                y109 = y1 + 1
                z109 = z1
                x110 = x1 + 1
                y110 = y1 + 1
                z110 = z1
                x111 = x1 + 1
                y111 = y1 + 1
                z111 = z1
                x112 = x1 + 1
                y112 = y1 + 1
                z112 = z1
                x113 = x1 + 1
                y113 = y1 + 1
                z113 = z1
                x114 = x1 + 1
                y114 = y1 + 1
                z114 = z1
                x115 = x1 + 1
                y115 = y1 + 1
                z115 = z1
                x116 = x1 + 1
                y116 = y1 + 1
                z116 = z1
                x117 = x1 + 1
                y117 = y1 + 1
                z117 = z1
                x118 = x1 + 1
                y118 = y1 + 1
                z118 = z1
                x119 = x1 + 1
                y119 = y1 + 1
                z119 = z1
                x120 = x1 + 1
                y120 = y1 + 1
                z120 = z1
                x121 = x1 + 1
                y121 = y1 + 1
                z121 = z1
                x122 = x1 + 1
                y122 = y1 + 1
                z122 = z1
                x123 = x1 + 1
                y123 = y1 + 1
                z123 = z1
                x124 = x1 + 1
                y124 = y1 + 1
                z124 = z1
                x125 = x1 + 1
                y125 = y1 + 1
                z125 = z1
                x126 = x1 + 1
                y126 = y1 + 1
                z126 = z1
                x127 = x1 + 1
                y127 = y1 + 1
                z127 = z1
                x128 = x1 + 1
                y128 = y1 + 1
                z128 = z1
                x129 = x1 + 1
                y129 = y1 + 1
                z129 = z1
                x130 = x1 + 1
                y130 = y1 + 1
                z130 = z1
                x131 = x1 + 1
                y131 = y1 + 1
                z131 = z1
                x132 = x1 + 1
                y132 = y1 + 1
                z132 = z1
                x133 = x1 + 1
                y133 = y1 + 1
                z133 = z1
                x134 = x1 + 1
                y134 = y1 + 1
                z134 = z1
                x135 = x1 + 1
                y135 = y1 + 1
                z135 = z1
                x136 = x1 + 1
                y136 = y1 + 1
                z136 = z1
                x137 = x1 + 1
                y137 = y1 + 1
                z137 = z1
                x138 = x1 + 1
                y138 = y1 + 1
                z138 = z1
                x139 = x1 + 1
                y139 = y1 + 1
                z139 = z1
                x140 = x1 + 1
                y140 = y1 + 1
                z140 = z1
                x141 = x1 + 1
                y141 = y1 + 1
                z141 = z1
                x142 = x1 + 1
                y142 = y1 + 1
                z142 = z1
                x143 = x1 + 1
                y143 = y1 + 1
                z143 = z1
                x144 = x1 + 1
                y144 = y1 + 1
                z144 = z1
                x145 = x1 + 1
                y145 = y1 + 1
                z145 = z1
                x146 = x1 + 1
                y146 = y1 + 1
                z146 = z1
                x147 = x1 + 1
                y147 = y1 + 1
                z147 = z1
                x148 = x1 + 1
                y148 = y1 + 1
                z148 = z1
                x149 = x1 + 1
                y149 = y1 + 1
                z149 = z1
                x150 = x1 + 1
                y150 = y1 + 1
                z150 = z1
                x151 = x1 + 1
                y151 = y1 + 1
                z151 = z1
                x152 = x1 + 1
                y152 = y1 + 1
                z152 = z1
                x153 = x1 + 1
                y153 = y1 + 1
                z153 = z1
                x154 = x1 + 1
                y154 = y1 + 1
                z154 = z1
                x155 = x1 + 1
                y155 = y1 + 1
                z155 = z1
                x156 = x1 + 1
                y156 = y1 + 1
                z156 = z1
                x157 = x1 + 1
                y157 = y1 + 1
                z157 = z1
                x158 = x1 + 1
                y158 = y1 + 1
                z158 = z1
                x159 = x1 + 1
                y159 = y1 + 1
                z159 = z1
                x160 = x1 + 1
                y160 = y1 + 1
                z160 = z1
                x161 = x1 + 1
                y161 = y1 + 1
                z161 = z1
                x162 = x1 + 1
                y162 = y1 + 1
                z162 = z1
                x163 = x1 + 1
                y163 = y1 + 1
                z163 = z1
                x164 = x1 + 1
                y164 = y1 + 1
                z164 = z1
                x165 = x1 + 1
                y165 = y1 + 1
                z165 = z1
                x166 = x1 + 1
                y166 = y1 + 1
                z166 = z1
                x167 = x1 + 1
                y167 = y1 + 1
                z167 = z1
                x168 = x1 + 1
                y168 = y1 + 1
                z168 = z1
                x169 = x1 + 1
                y169 = y1 + 1
                z169 = z1
                x170 = x1 + 1
                y170 = y1 + 1
                z170 = z1
                x171 = x1 + 1
                y171 = y1 + 1
                z171 = z1
                x172 = x1 + 1
                y172 = y1 + 1
                z172 = z1
                x173 = x1 + 1
                y173 = y1 + 1
                z173 = z1
                x174 = x1 + 1
                y174 = y1 + 1
                z174 = z1
                x175 = x1 + 1
                y175 = y1 + 1
                z175 = z1
                x176 = x1 + 1
                y176 = y1 + 1
                z176 = z1
                x177 = x1 + 1
                y177 = y1 + 1
                z177 = z1
                x178 = x1 + 1
                y178 = y1 + 1
                z178 = z1
                x179 = x1 + 1
                y179 = y1 + 1
                z179 = z1
                x180 = x1 + 1
                y180 = y1 + 1
                z180 = z1
                x181 = x1 + 1
                y181 = y1 + 1
                z181 = z1
                x182 = x1 + 1
                y182 = y1 + 1
                z182 = z1
                x183 = x1 + 1
                y183 = y1 + 1
                z183 = z1
                x184 = x1 + 1
                y184 = y1 + 1
                z184 = z1
                x185 = x1 + 1
                y185 = y1 + 1
                z185 = z1
                x186 = x1 + 1
                y186 = y1 + 1
                z186 = z1
                x187 = x1 + 1
                y187 = y1 + 1
                z187 = z1
               
    
    评论

报告相同问题?