package main
import "fmt"
func main() {
/* 输入部分 */
var w, x, h int
var q int
fmt.Scan(&w, &x, &h, &q)
query := make([][]int, q)
for i := range q {
query_i := make([]int, 6)
fmt.Scan(&query_i[0], &query_i[1], &query_i[2], &query_i[3], &query_i[4], &query_i[5])
query[i] = query_i
}
/* 构造一个布尔三维数组 */
/* 用布尔值存数据的原因是,一个布尔值只占用一个字节 */
cube := make([][][]bool, w)
for i := range w {
surface := make([][]bool, x)
cube[i] = surface
for j := range x {
line := make([]bool, h)
cube[i][j] = line
}
}
for i := range q {
for j := query[i][0]; j <= query[i][3]; j++ {
for k := query[i][1]; k <= query[i][4]; k++ {
for l := query[i][2]; l <= query[i][5]; l++ {
cube[j-1][k-1][l-1] = true // query 的索引从 1 开始,所以减 1 防止超出范围
}
}
}
}
var ans int
for i := range w {
for j := range x {
for k := range h {
if !cube[i][j][k] { // false 表示未切割
ans++
}
}
}
}
fmt.Println(ans)
}
太复杂了就把 P5729 的解法贴到这里了。