【題目敘述】https://zerojudge.tw/ShowProblem?problemid=e549
【解題想法】
- 計算多個立方體重疊的體積。
- 讀入每個立方體角落的(x, y, z)坐標,計算其斜對角座標 (x+L, y+L, z+L)。
- 求得所有角落坐標的最大值 x1/y1/z1,及所有斜對角座標的最小值x2/y2/z2,即可求得重疊的體積。
- 若 x1 > x2 或 y1 > y2 或 z1 > z2,則重疊的體積為零。
#include <iostream>
using namespace std;
const int maxn = 1e6;
int main() {
int n;
int x, y, z, L;
while (cin >> n){
if (n == 0) break;
int x1 = 0, x2 = maxn;
int y1 = 0, y2 = maxn;
int z1 = 0, z2 = maxn;
for (int i = 0; i < n; i++) {
cin >> x >> y >> z >> L;
x1 = max(x1, x);
x2 = min(x2, x + L);
y1 = max(y1, y);
y2 = min(y2, y + L);
z1 = max(z1, z);
z2 = min(z2, z + L);
}
cout << max(0, x2-x1) * max(0, y2-y1) * max(0, z2-z1) << "\n";
}
return 0;
}