2388: 【入门】【P5729】工艺品制作

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:50 解决:18

题目描述

现有一个长宽高分别为 lns="http://www.w3.org/1998/Math/MathML">,, 组成的实心玻璃立方体,可以认为是由 lns="http://www.w3.org/1998/Math/MathML">1×1×1 的数个小方块组成的,每个小方块都有一个坐标 lns="http://www.w3.org/1998/Math/MathML">(,,)。现在需要进行 lns="http://www.w3.org/1998/Math/MathML"> 次切割。每次切割给出 lns="http://www.w3.org/1998/Math/MathML">(1,1,1),(2,2,2) 这 6 个参数,保证 lns="http://www.w3.org/1998/Math/MathML">12lns="http://www.w3.org/1998/Math/MathML">12lns="http://www.w3.org/1998/Math/MathML">12;每次切割时,使用激光工具切出一个立方体空洞,空洞的壁平行于立方体的面,空洞的对角点就是给出的切割参数的两个点。

换句话说,所有满足 lns="http://www.w3.org/1998/Math/MathML">12lns="http://www.w3.org/1998/Math/MathML">12lns="http://www.w3.org/1998/Math/MathML">12 的小方块 lns="http://www.w3.org/1998/Math/MathML">(,,) 的点都会被激光蒸发。例如有一个 lns="http://www.w3.org/1998/Math/MathML">4×4×4 的大方块,其体积为 lns="http://www.w3.org/1998/Math/MathML">64;给出参数 lns="http://www.w3.org/1998/Math/MathML">(1,1,1),(2,2,2) 时,中间的 lns="http://www.w3.org/1998/Math/MathML">8 块小方块就会被蒸发,剩下 lns="http://www.w3.org/1998/Math/MathML">56 个小方块。现在想知道经过所有切割操作后,剩下的工艺品还剩下多少格小方块的体积?

输入

第一行三个正整数 lns="http://www.w3.org/1998/Math/MathML">,,

第二行一个正整数 lns="http://www.w3.org/1998/Math/MathML">

接下来 lns="http://www.w3.org/1998/Math/MathML"> 行,每行六个整数 lns="http://www.w3.org/1998/Math/MathML">(1,1,1),(2,2,2)

输出

输出一个整数表示答案。

样例输入 复制

4 4 4
1
1 1 1 2 2 2

样例输出 复制

56

提示

数据保证,lns="http://www.w3.org/1998/Math/MathML">1,,20lns="http://www.w3.org/1998/Math/MathML">1100lns="http://www.w3.org/1998/Math/MathML">112lns="http://www.w3.org/1998/Math/MathML">112lns="http://www.w3.org/1998/Math/MathML">112

#include<bits/stdc++.h>
using namespace std;

int main(){
    int v[22][22][22],w,x,h,q,x1,x2,y1,y2,z1,z2,ans=0;
    cin>>w>>x>>h>>q;
    for (int i=1;i<=w;i++)
        for (int j=1;j<=x;j++)
            for (int k=1;k<=h;k++)
                v[i][j][k]=1;
                //先把三维数组的每个位置赋值为1
	while (q--) {
		cin>>x1>>y1>>z1>>x2>>y2>>z2;
		for (int i=x1;i<=x2;i++)
		    for (int j=y1;j<=y2;j++)
		        for (int k=z1;k<=z2;k++)
				    v[i][j][k]=0;
				    //对每个操作,把删掉的小方块所对应的数组位置赋值为0 
	} 
    for (int i=1;i<=w;i++)
        for (int j=1;j<=x;j++)
            for (int k=1;k<=h;k++)
                ans+=v[i][j][k];
                //所有操作结束之后,对每个小方块看一下是1还是0,计算答案 
	cout<<ans<<endl;
	return 0;
}