#P17039. [NWERC 2021] Cutting Edge
[NWERC 2021] Cutting Edge
背景
译自 Northwestern Europe Regional Contest (NWERC) 2021 Problem C。
原题许可协议为 CC BY-SA。
题目描述
近些年来,各类 D 物体的自动化制造在世界各地的爱好者中越来越流行。你的朋友 Lewis 完全投入了这股潮流:他的车库里现在摆满了各种 D 打印机和其他昂贵设备。
他不断扩张的收藏中最新加入的是一台自动切割机。这台机器的工作方式是:从一个初始形状为长方体的工件上切掉材料。每一次切割都会沿一个平面切过工件,并只保留该平面一侧的材料。这意味着最终工件的形状一定是一个凸多面体。
Lewis 这台机器的编程接口相当特别。用户并不直接指定切割平面,而是输入一组点,机器随后计算切割平面,使得所有这些点都属于最终形状,并且该形状的体积最小。形式化地说,它计算输入点的凸包。虽然这种设定在许多应用中很方便,但它也有些限制,因为机器只允许点的坐标使用 的整数倍。
Lewis 想用这台机器为一款桌面游戏切割游戏棋子。他并不特别关心棋子的形状,但要求它们有指定的重量。工件密度恒定,因此他只需要保证最终形状有指定的体积即可。不过,由于机器的输入要求,这仍然很有挑战。请帮助 Lewis 为他的切割机找到一个合法输入。
输入格式
输入包含:
- 一行四个整数 和 (,),其中工件尺寸为 ,最终形状的体积必须为 。
输出格式
输出一个整数 (),随后输出 个点来指定最终形状。每个点由三个整数 给出(,,)。机器会把这 个点的凸包作为最终形状,其体积必须恰好为 。
如果存在多个合法解,你可以输出任意一个。保证一定存在解。注意,允许输出重复的点。
1 1 1 1
4
0 0 0
1 0 0
0 1 0
0 0 1
3 1 2 7
5
0 0 1
2 0 0
3 0 0
3 0 2
2 1 1
2 2 2 25
9
0 0 2
2 0 0
0 2 0
1 0 2
2 1 2
2 0 1
0 2 2
1 2 2
2 1 2
提示
【数据规模与约定】
对于所有数据,,;输出点数满足 ,每个点满足 、、。保证存在解。