#P1162. Building with Blocks
Building with Blocks
本题没有可用的提交语言。
描述
一个单位立方体(unit cube)是指边长为1的立方体,其顶点的、、坐标均为整数。如果两个单位立方体共享一个面,则称它们是连通的。一个三维实体(solid)是由若干连通单位立方体组成的非空集合(见图1)。实体的体积即其所含单位立方体的数量。
</p>
一个块(block)是体积不超过4的实体。如果两个块能通过平移和旋转(不包括镜像)相互转换,则认为它们是同类型的。共有12种不同的块类型(见图2)。图中的颜色仅用于区分结构,无其他含义。
对于一个实体,若块集合满足以下条件,则称是的一个分解:
- 中所有块的并集等于;
- 中任意两个不同的块不共享任何单位立方体。
你的任务是编写程序,给定一个实体的描述,找到能分解的最少数量的块集合,并统计这些块中每种类型出现的次数。
输入
程序从标准输入读取数据:
- 第1行:实体的体积();
- 接下来的行:每行包含三个整数、、,表示中每个单位立方体的最小角坐标()。
输出
程序向标准输出写入:
- 第1行:分解所需的最少块数。
示例
输入数据1
18
2 1 1
4 1 1
2 3 1
4 3 1
2 1 2
3 1 2
4 1 2
1 2 2
2 2 2
3 2 2
4 2 2
2 3 2
3 3 2
4 3 2
4 2 3
4 2 4
4 2 5
5 2 5
输出数据1
5
来源
IOI 2000