Area of Polycubes

http://poj.org/problem?id=3792

题意:给出n个小正方体的中心坐标,求构成的多重小立方体的表面积。要求输入的下一个小正方体必须与之前的正方体有一个面是相交的。如果不满足条件,输出NO,并输出第几个正方体是不满足条件的。

思路:总面积s = n*6;每形成距离为1的正方体面积就减少2,如果在该正方体之前没有距离为1的正方体则该正方体不满足条件。注意重坐标。

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 using namespace std;
 5 const int N=1010;
 6 struct node
 7 {
 8     int x,y,z;
 9 } g[N];
10 int dis(int i,int j)
11 {
12     int d = abs(g[i].x-g[j].x)+abs(g[i].y-g[j].y)+abs(g[i].z-g[j].z);
13     return d;
14 }
15 int main()
16 {
17     int t;
18     int area = 0,o = 0;
19     scanf("%d",&t);
20     while(t--)
21     {
22         o++;
23         int n;
24         int flag = 0, res = 0;
25         scanf("%d",&n);
26         area = n*6;
27         for (int i = 0; i < n; i++)
28             scanf("%d,%d,%d",&g[i].x,&g[i].y,&g[i].z);
29         for (int i = 1; i < n; i++)
30         {
31             flag = 0;
32             for (int j = 0; j < i; j++)
33             {
34                 if(dis(i,j)==1)
35                 {
36                     flag = 1;
37                     area -=2;
38                 }
39                 else if(dis(i,j)==0)
40                 {
41                     flag = 0;
42                     break;
43                 }
44             }
45             if (!flag)
46             {
47                 printf("%d NO %d
",o,i+1);
48                 break;
49             }
50         }
51         if (flag)
52             printf("%d %d
",o,area);
53     }
54     return 0;
55 }
View Code
原文地址:https://www.cnblogs.com/lahblogs/p/3643742.html