http://poj.org/problem?id=3792
题意:给出n个小正方体的中心坐标,求构成的多重小立方体的表面积。要求输入的下一个小正方体必须与之前的正方体有一个面是相交的。如果不满足条件,输出NO,并输出第几个正方体是不满足条件的。
思路:总面积s = n*6;每形成距离为1的正方体面积就减少2,如果在该正方体之前没有距离为1的正方体则该正方体不满足条件。注意重坐标。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }