輸入格式
第一行三個正整數 w,x,h。
第二行一個正整數 q。
接下來 q 行,每行六個整數
輸出格式
輸出一個整數表示答案。
三維數組直接標記
class Solution:@staticmethoddef oi_input():"""從標準輸入讀取數據"""w, x, h = map(int, input().split())q = int(input())intervals = []for _ in range(q):intervals.append(list(map(int, input().split())))return w, x, h, intervals@staticmethoddef oi_test():"""提供測試數據"""return (4, 4, 4, [[1, 1, 1, 2, 2, 2]])@staticmethoddef solution(w, x, h, intervals):# 初始化三維數組,所有位置初始為1cube = [[[1 for _ in range(h + 1)] for _ in range(x + 1)] for __ in range(w + 1)]# 處理每次切割for interval in intervals:x1, y1, z1, x2, y2, z2 = intervalfor i in range(x1, x2 + 1):for j in range(y1, y2 + 1):for k in range(z1, z2 + 1):cube[i][j][k] = 0# 統計剩余的小方塊數目count = 0for i in range(1, w + 1):for j in range(1, x + 1):for k in range(1, h + 1):count += cube[i][j][k]return countoi_input = Solution.oi_input
oi_test = Solution.oi_test
solution = Solution.solutionif __name__ == '__main__':w, x, h, intervals = oi_test()# w, x, h, intervals = oi_input()print(solution(w, x, h, intervals))
三維差分數組
class Solution:@staticmethoddef oi_input():"""從標準輸入讀取數據"""w, x, h = map(int, input().split())q = int(input())intervals = []for _ in range(q):intervals.append(list(map(int, input().split())))return w, x, h, intervals@staticmethoddef oi_test():"""提供測試數據"""return (4, 4, 4, [[1, 1, 1, 2, 2, 2]])@staticmethoddef solution(w, x, h, intervals):diff = [[[0] * (h + 2) for _ in range(x + 2)] for __ in range(w + 2)]for x1, y1, z1, x2, y2, z2 in intervals:diff[x1][y1][z1] += 1diff[x1][y1][z2 + 1] -= 1diff[x1][y2 + 1][z1] -= 1diff[x1][y2 + 1][z2 + 1] += 1diff[x2 + 1][y1][z1] -= 1diff[x2 + 1][y1][z2 + 1] += 1diff[x2 + 1][y2 + 1][z1] += 1diff[x2 + 1][y2 + 1][z2 + 1] -= 1# Calculate prefix sumsfor j in range(1, x + 1):for k in range(1, h + 1):for i in range(1, w + 1):diff[i][j][k] += diff[i - 1][j][k]for i in range(1, w + 1):for k in range(1, h + 1):for j in range(1, x + 1):diff[i][j][k] += diff[i][j - 1][k]for i in range(1, w + 1):for j in range(1, x + 1):for k in range(1, h + 1):diff[i][j][k] += diff[i][j][k - 1]count = 0for i in range(1, w + 1):for j in range(1, x + 1):for k in range(1, h + 1):if diff[i][j][k] == 0:count += 1return countoi_input = Solution.oi_input
oi_test = Solution.oi_test
solution = Solution.solutionif __name__ == '__main__':w, x, h, intervals = oi_test()# w, x, h, intervals = oi_input()print(solution(w, x, h, intervals))