UVa 737 - Gleaming the Cubes

本文介绍了一种计算多个立方体交集体积的方法,通过确定各维度上的最大最小值来快速求解,适用于计算几何领域的问题解决。

題目:求n個立方體的公共部分的體積。

分析:計算幾何。直接求出每個維度的最大的最小值和最小的最大值,做差求積即可。

說明:注意如果摸個維度是負數,則取0。

#include <stdio.h>
#include <string.h>

int x[1001];
int y[1001];
int z[1001];
int l[1001];

int main()
{
	int n, m, x1, y1, z1, x2, y2, z2;
	while (~scanf("%d",&n) && n) {
		for (int i = 0; i < n; ++ i)
			scanf("%d%d%d%d",&x[i],&y[i],&z[i],&l[i]);
		x1 = x[0]; x2 = x[0]+l[0]; 
		y1 = y[0]; y2 = y[0]+l[0];
		z1 = z[0]; z2 = z[0]+l[0];
		for (int i = 1; i < n; ++ i) {
			x1 = (x1>x[i])?x1:x[i];
			y1 = (y1>y[i])?y1:y[i];
			z1 = (z1>z[i])?z1:z[i];
		}
		for (int i = 1; i < n; ++ i) {
			x2 = (x2<x[i]+l[i])?x2:(x[i]+l[i]);
			y2 = (y2<y[i]+l[i])?y2:(y[i]+l[i]);
			z2 = (z2<z[i]+l[i])?z2:(z[i]+l[i]);
		}
		
		if (x2 < x1 || y2 < y1 || z2 < z1)
			printf("0\n");
		else printf("%d\n",(x2-x1)*(y2-y1)*(z2-z1));
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值