1. 程式人生 > 實用技巧 >工藝品製作(多維陣列應用)

工藝品製作(多維陣列應用)

題目描述

現有一個長寬高分別為 w,x,h(1≤w,x,h≤20)w,x,h(1\le w,x,h\le 20)w,x ,h(1w,x,h20) 組成的實心玻璃立方體,可以認為是由 1×1×11\times1\times11×1×1 的數個小方塊組成的,每個小方塊都有一個座標 (i,j,k) ( i,j,k ) (i,j,k)。現在需要進行 q(q≤100)q(q\le 100)q(q100) 次切割。每次切割給出 (x1,y1,z1),(x2,y2,z2)(x_1,y_1,z_1),(x_2,y_2,z_2)(x1,y1,z1),(x2,y2,z2) 這 6 個引數,保證 x1≤x2x_1\le x_2x1x2y1≤y2y_1\le y_2y1y2z1≤z2z_1\le z_2z1z2;每次切割時,使用鐳射工具切出一個立方體空洞,空洞的壁平行於立方體的面,空洞的對角點就是給出的切割引數的兩個點。

換句話說,所有滿足 x1≤i≤x2x_1\le i\le x_2x1ix2y1≤j≤y2y_1\le j \le y_2 y1jy2z1≤k≤z2z_1\le k\le z_2z1kz2 的小方塊 (i,j,k)(i,j,k)(i,j,k) 的點都會被鐳射蒸發。例如有一個 4×4×4 的大方塊,其體積為 64;給出引數 (1,1,1),(2,2,2) 時,中間的 8 塊小方塊就會被蒸發,剩下 56 個小方塊。現在想知道經過所有切割操作後,剩下的工藝品還剩下多少格小方塊的體積?

輸入格式

第一行三個正整數 w,x,hw,x,hw,x,h。

第二行一個正整數 qqq。

接下來 qqq 行,每行六個整數 (x1,y1,z1),(x2,y2,z2)(x_1,y_1,z_1),(x_2,y_2,z_2)(x1,y1,z1),(x2,y2,z2)

輸出格式

輸出一個整數表示答案。

輸入輸出樣例

輸入 #1
4 4 4
1
1 1 1 2 2 2
輸出 #1
56

程式碼如下

#include<iostream>
using namespace std;

int cube[21][21][21];
int main()
{
int w,x,h;
int q;
int ant = 0;

cin >> w >> x >> h;
cin >> q;
while(q--)
{

int x1,y1,z1,x2,y2,z2;
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++)
cube[i][j][k] = 1;

}

for(int i = 1; i <= w; i++)
for(int j = 1; j <= x; j++)
for(int k = 1; k <= h; k++)
if( cube[i][j][k] == 0)
ant++;

cout << ant << endl;

return 0;
}