【深基5.例7】工艺品制作 · 教师题解

【深基5.例7】工艺品制作

解题思路

用三维布尔数组记录哪些小方块已被切除。每次枚举切割范围设为 true,最后统计仍为 false 的位置。

正确性说明

布尔标记表示所有切割区域的并集,重复切除不会多计。未被任何切割覆盖的位置恰好是剩余体积。

易错点

范围含两个端点;切割重叠时不能直接重复减体积。

复杂度

时间 O((q+1)wxh),空间 O(wxh)。

参考代码(C++11)

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

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int w, x, h, q;
    cin >> w >> x >> h >> q;
    static bool cut[21][21][21] = {};
    while (q--) {
        int a, b, c, d, e, f;
        cin >> a >> b >> c >> d >> e >> f;
        for (int i = a; i <= d; i++)
            for (int j = b; j <= e; j++)
                for (int k = c; k <= f; k++)
                    cut[i][j][k] = true;
    }
    int ans = 0;
    for (int i = 1; i <= w; i++)
        for (int j = 1; j <= x; j++)
            for (int k = 1; k <= h; k++)
                if (!cut[i][j][k])
                    ans++;
    cout << ans << "\n";
    return 0;
}
返回题目