给定一张形状为简单多边形 $S$ 的纸。你的任务是将其转化为一个面积与 $S$ 相同的简单多边形 $T$。
你可以使用两种工具:剪刀和胶带。剪刀可以将任何多边形切割成更小的多边形碎片。胶带可以将较小的碎片组合成更大的多边形。你可以多次使用每种工具,顺序不限。
输入中的多边形具有整数坐标,但你可以在输出中生成具有非整数坐标的形状。
以下是任务的正式定义。
形状 $Q = (Q_0, \dots, Q_{n-1})$ 是平面上三个或更多点的序列,满足: 闭合折线 $Q_0Q_1Q_2 \dots Q_{n-1}Q_0$ 从不接触或自交,因此它构成了一个简单多边形的边界。 折线沿逆时针方向绕多边形边界运行。
以形状 $Q$ 为边界的多边形记为 $P(Q)$。
如果两个形状可以通过平移和/或旋转变得完全相同,则称它们是等价的。注意,不允许对形状进行镜像翻转。还要注意,点的顺序很重要:形状 $(Q_1, \dots, Q_{n-1}, Q_0)$ 不一定等价于 $(Q_0, \dots, Q_{n-1})$。
在输入和输出中,一个具有 $n$ 个点的形状由一行表示,包含 $2n+1$ 个空格分隔的数字:数字 $n$ 后跟点的坐标:$Q_{0,x}, Q_{0,y}, Q_{1,x}, \dots$
形状具有识别编号(ID)。给定的形状 $S$ 的 ID 为 0,你在解题过程中生成的形状 ID 分别为 1, 2, 3, \dots,按生成的顺序排列。
如果形状 $B_1, \dots, B_k$ 满足以下条件,则称它们构成形状 $A$ 的一个剖分: 所有 $P(B_i)$ 的并集恰好是 $P(A)$。 对于每个 $i \neq j$,$P(B_i)$ 和 $P(B_j)$ 的交集面积为零。
剪刀操作会销毁一个现有的形状 $A$,并产生一个或多个构成 $A$ 的剖分的形状 $B_1, \dots, B_k$。
胶带操作会销毁一个或多个现有的形状 $A_1, \dots, A_k$,并产生一个新的形状 $B$。为了执行此操作,你必须首先指定形状 $C_1, \dots, C_k$,然后再指定最终形状 $B$。这些形状必须满足以下条件: 对于每个 $i$,形状 $C_i$ 与形状 $A_i$ 等价。 形状 $C_1, \dots, C_k$ 构成形状 $B$ 的一个剖分。
通俗地说,你选择形状 $B$,并展示如何将每个现有的 $A_i$ 移动到 $B$ 内的正确位置 $C_i$。注意,只有形状 $B$ 会获得新的 ID,形状 $C_i$ 不会。
输入格式
第一行包含源形状 $S$。 第二行包含目标形状 $T$。 每个形状包含 3 到 10 个点(含边界)。两个形状均按上述格式给出。 输入中的所有坐标均为 $-10^6$ 到 $10^6$ 之间的整数。 在每个形状中,没有三个点形成的角小于 3 度。(这包括非连续点,并暗示没有三点共线。) 多边形 $P(S)$ 和 $P(T)$ 的面积相等。
输出格式
每当你使用剪刀操作时,输出以下形式的行块:
scissors id(A) k B_1 B_2 ... B_k
其中 $id(A)$ 是你想要销毁的形状的 ID,$k$ 是你想要产生的新形状的数量,$B_1, \dots, B_k$ 是那些形状。
每当你使用胶带操作时,输出以下形式的行块:
tape k id(A_1) ... id(A_k) C_1 C_2 ... C_k B
其中 $k$ 是你想要粘合在一起的形状数量,$id(A_1), \dots, id(A_k)$ 是它们的 ID,$C_1, \dots, C_k$ 是展示它们在 $B$ 中位置的等价形状,$B$ 是通过将它们粘合在一起获得的最终形状。
建议将点的坐标输出到至少 10 位小数。
输出必须满足以下条件: 输出中点的所有坐标必须在 $-10^7$ 到 $10^7$ 之间(含边界)。 输出中的每个形状最多包含 100 个点。 在每次操作中,形状数量 $k$ 必须在 1 到 100 之间(含边界)。 操作次数不得超过 2000。 输出中所有形状的点总数不得超过 20000。 最后,必须恰好剩下一个形状(未被销毁),且该形状必须与 $T$ 等价。
所有操作必须根据检查器有效。允许有微小舍入误差的解。(在验证每个条件时,内部所有比较都会检查绝对或相对误差是否在 $10^{-3}$ 以内。)
说明
- 有关如何打印浮点数的说明,请参阅你所用编程语言的笔记。
- 你可以下载二进制文件
scissors-checker,使其可执行(chmod a+x scissors-checker),并在本地使用它来检查输出的正确性(./scissors-checker input your_output)。
子任务
如果形状的形式为 $((0, 0), (x, 0), (x, y), (0, y))$ 且 $x, y$ 为正整数,则称该形状为优美矩形。 如果此外 $x = y$,则称该形状为优美正方形。 如果多边形 $P(A)$ 的所有内角均小于 180 度,则称形状 $A$ 为严格凸的。
- 子任务 1(5 分):$S$ 和 $T$ 是优美矩形。所有点的坐标均为 0 到 10 之间的整数。
- 子任务 2(13 分):$S$ 是 $x > y$ 的优美矩形,$T$ 是优美正方形。
- 子任务 3(12 分):$S$ 和 $T$ 是优美矩形。
- 子任务 4(14 分):$S$ 是三角形,$T$ 是优美正方形。
- 子任务 5(10 分):$S$ 和 $T$ 是三角形。
- 子任务 6(16 分):$S$ 是严格凸多边形,$T$ 是优美矩形。
- 子任务 7(11 分):$T$ 是优美矩形。
- 子任务 8(19 分):无额外限制。
样例
样例输入 1
6 0 0 6 0 6 4 5 4 5 9 0 9 4 0 0 7 0 7 7 0 7
样例输出 1
scissors 0 5 3 0 0 3 0 3 4 3 3 4 0 4 0 0 3 3 0 6 0 6 4 3 6 4 3 4 3 0 4 0 4 5 4 5 9 0 9 tape 5 1 2 5 3 4 3 0 3 0 0 4 0 3 4 0 7 0 7 4 4 0 3 4 0 7 4 3 7 3 7 4 7 7 3 7 3 3 7 0 7 0 3 4 0 0 7 0 7 7 0 7
样例输入 2
4 0 0 3 0 3 3 0 3 4 7 -1 10 -1 11 2 8 2
样例输出 2
scissors 0 2 3 0 0 1 3 0 3 4 1 3 0 0 3 0 3 3 tape 2 1 2 3 110 -1 111 2 110 2 4 108 2 107 -1 110 -1 110 2 4 107 -1 110 -1 111 2 108 2
样例输入 3
4 0 0 9 0 9 1 0 1 4 0 0 3 0 3 3 0 3
样例输出 3
scissors 0 2 4 1.47000000000 0 9 0 9 1 1.470000000 1 4 0 0 1.470000000 0 1.470000000 1 0 1 scissors 1 2 4 1.470000000 0 6 0 6 1 1.470000000 1 4 9 0 9 1 6 1 6 0 tape 2 4 3 4 3 2 3 1 6 1 6 2 4 6 1 1.470000000 1 1.470000000 0 6 0 6 1.470000000 0 6 0 6 2 3 2 3 1 1.47 1 scissors 5 4 4 1.470000000 0 3 0 3 1 1.470000000 1 4 3 0 4 0 4 2 3 2 4 4 2 4 0 5 0 5 2 4 5 0 6 0 6 2 5 2 tape 5 2 6 7 8 9 4 0 0 1.470000000 0 1.470000000 1 0 1 4 1.470000000 0 3 0 3 1 1.470000000 1 4 0 2 0 1 2 1 2 2 4 0 2 2 2 2 3 0 3 4 3 3 2 3 2 1 3 1 4 0 0 3 0 3 3 0 3