http://acm.pku.edu.cn/JudgeOnline/problem?id=1188
Код:
#include <stdio.h> #define MAX(x, y) (((x)>(y))?(x):(y)) #define MIN(x, y) (((x)<(y))?(x):(y)) typedef struct POINT {int x; int y; int z;} pnt; int main() { int n, l, sol, i; pnt from, to, add; while(1) { scanf("%d",&n); if(n==0) break; scanf("%d %d %d %d",&from.x,&from.y,&from.z,&l); to.x = from.x+l; to.y = from.y+l; to.z = from.z+l; for(i=0; i<n-1; i++) { scanf("%d %d %d %d",&add.x,&add.y,&add.z,&l); from.x = MAX(add.x,from.x); from.y = MAX(add.y,from.y); from.z = MAX(add.z,from.z); to.x = MIN(add.x+l,to.x); to.y = MIN(add.y+l,to.y); to.z = MIN(add.z+l,to.z); } sol = MAX((to.x - from.x) * (to.y - from.y) * (to.z - from.z), 0); printf("%d\n",sol); } return 0; }