Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 428 | Accepted: 213 |
Description
As chief engineer of the Starship Interprize, the task of repairing the hyperstellar, cubic, transwarped-out software has fallen on your shoulders. Simply put, you must compute the volume of the intersection of anywhere from 2 to 1000 cubes.
Input
The input consists of several sets of cubes for which the volume of their intersections must be computed. The first line of each set contains a number (from 2 to 1000) which indicates the number of cubes which follow, one cube per line. Each line which describes a cube contains four integers. The first three integers are the x, y, and z coordinates of the corner of a cube, and the fourth integer is the positive distance which the cube extends in each of the three directions (parallel to the x, y, and z axes) from that corner.
Following the data for the first set of cubes will be a number which indicates how many cubes are in a second set, followed by the cube descriptions for the second set, again one per line. Following this will be a third set, and so on.A number =0 indicate the end of input.
Output
Your program should process sets all of cubes, outputting the volume of their intersections to the output file, one set per line, until a zero is read for the number of cubes.
Sample Input
Sample Output
Source
Mid-Central USA 1993
******************************************************************************************
********************************************************************************************
#include <iostream> using namespace std; struct Pot { int x,y,z; }L,R,C; int main() { int N,x,y,z,len; while(cin >> N,N!=0) { L.x = L.y = L.z = len = 0; cin >> L.x >> L.y >> L.z >> len; R.x = L.x + len; R.y = L.y + len; R.z = L.z + len; N--; bool flag = 1; while(N--) { C.x = C.y = C.z = len = 0; cin >> C.x >> C.y >> C.z >> len; if(C.x>=R.x||C.y>=R.y||C.z>=R.z) { flag = 0;break;} if(C.x+len<=L.x||C.y+len<=L.y||C.z+len<=L.z) {flag = 0;break;} if(C.x>L.x) L.x = C.x; if(C.y>L.y) L.y = C.y; if(C.z>L.z) L.z = C.z; if(C.x+len<R.x) R.x = C.x+len; if(C.y+len<R.y) R.y = C.y+len; if(C.z+len<R.z) R.z = C.z+len; } while(N>0) {N--;cin >> C.x >> C.y >> C.z >> len;} if(flag == 0) {cout << 0 << endl; continue;} cout << (R.x-L.x)*(R.y-L.y)*(R.z-L.z) << endl; } return 0; }
25 9
2 0 0 0 10 9 1 1 5 3 0 0 0 10 9 1 1 5 8 2 2 3 0