剪贴板 - m86xbxbb

最后更新于 2025-08-23 12:14:29
作者
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 的解法贴到这里了。