记录编号 161059 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [NOI 1997]卫星覆盖 最终得分 100
用户昵称 Gravatarmikumikumi 是否通过 通过
代码语言 C++ 运行时间 0.019 s
提交时间 2015-04-30 23:03:38 内存使用 0.29 MiB
显示代码纯文本
#include<cstdio>
using namespace std;
class miku
{
public:
	int lx,ly,lz;
	int rx,ry,rz;
}r[110];
int n,ans=0;
int pan(miku a,miku b)
{
	if(a.lx>=b.rx||a.ly>=b.ry||a.lz>=b.rz||b.lx>=a.rx||b.ly>=a.ry||b.lz>=a.rz) return 1;
	else return 0;
}
miku ne(int lx,int ly,int lz,int rx,int ry,int rz)
{
	miku a;
	a.lx=lx,a.ly=ly,a.lz=lz,a.rx=rx,a.ry=ry,a.rz=rz;
	return a;
}
int cut(miku a,int pos)
{
	int re=0;
	do
	{
		pos++;
	}while(pos<=n&&pan(a,r[pos])==1);
	if(pos>n) re=(a.rx-a.lx)*(a.ry-a.ly)*(a.rz-a.lz);
	else
	{
		if(a.lx<r[pos].lx)
		{
			re+=cut(ne(a.lx,a.ly,a.lz,r[pos].lx,a.ry,a.rz),pos);
			a.lx=r[pos].lx;
		}
		if(a.rx>r[pos].rx)
		{
		re+=cut(ne(r[pos].rx,a.ly,a.lz,a.rx,a.ry,a.rz),pos);
		a.rx=r[pos].rx;
		}
		if(a.ly<r[pos].ly)
		{
			re+=cut(ne(a.lx,a.ly,a.lz,a.rx,r[pos].ly,a.rz),pos);
			a.ly=r[pos].ly;
		}
		if(a.ry>r[pos].ry)
		{
			re+=cut(ne(a.lx,r[pos].ry,a.lz,a.rx,a.ry,a.rz),pos);
			a.ry=r[pos].ry;
		}
		if(a.lz<r[pos].lz)
		{
			re+=cut(ne(a.lx,a.ly,a.lz,a.rx,a.ry,r[pos].lz),pos);
			a.lz=r[pos].lz;
		}
		if(a.rz>r[pos].rz)
		{
			re+=cut(ne(a.lx,a.ly,r[pos].rz,a.rx,a.ry,a.rz),pos);
			a.rz=r[pos].rz;
		}
	}
	return re;
}
int main()
{
	freopen("satellitecover.in","r",stdin);
	freopen("satellitecover.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		int x,y,z,q;
		scanf("%d%d%d%d",&x,&y,&z,&q);
		r[i].lx=x-q;r[i].ly=y-q;r[i].lz=z-q;
		r[i].rx=x+q;r[i].ry=y+q;r[i].rz=z+q;
	}
	for(int i=n;i>=1;i--)
	ans+=cut(r[i],i);
	printf("%d",ans);
	return 0;
}