luogu#P6848. [CEOI2019] Scissors and Tape

[CEOI2019] Scissors and Tape

题目描述

您有一个简单多边形 SS,现在您想将其变成与其面积相等的简单多边形 TT

您可以使用两种工具:剪刀和胶带。剪刀可将任何多边形切割成较小的多边形。胶带可将较小的多边形组合成较大的多边形。您可以按任何顺序多次使用每个工具。

输入中的多边形的顶点坐标均为整数,但您的方案允许产生顶点坐标不为整数的多边形。

任务的形式化定义如下:

一个形状 Q=(Q0,Qn1)Q=(Q_0,\ldots Q_{n-1}) 是平面中三个点及以上的序列,满足:

  • 闭合折线 Q0,Q1,Q2,Qn1,Q0Q_0,Q_1,Q_2,\ldots Q_{n-1},Q_0 不相交。
  • 这段折线以逆时针围绕多边形的边界。

以形状 QQ 为边界的多边形为 P(Q)P(Q)

两个形状等效当且仅当一个形状经过平移或旋转之后与另一个形状相同。

不允许对形状进行对称,且点的顺序与形状有关:(Q0,Q1Qn1)(Q_0,Q_1\ldots Q_{n-1}) 不一定等价于 (Q1Qn1,Q0)(Q_1\ldots Q_{n-1},Q_0)

在上图中,形状 UUVV 是等价的,但形状 WW 与他们不等价,原因是给出的点的顺序不同,无论如何,第四个形状都不与前三个形状相同,因为不允许对称形状。

每一个形状的表示由 2×n+12\times n+1 个数组成,第一个数为 nn,表示形状的点数,接下来 2×n2\times n 个数 Q0,x,Q0,y,Q1,x,,Qn1,x,Qn1,yQ_{0,x},Q_{0,y},Q_{1,x},\ldots,Q_{n-1,x},Q_{n-1,y},每两个数均表示形状里一个点的坐标,如 (Q0,x,Q0,y)(Q_{0,x},Q_{0,y})Q0Q_0 的坐标。

形状 B1,B2,BkB_1,B_2,\ldots B_k 被称为形状 AA 的划分,当且仅当:

  • 所有 P(Bi)P(B_i) 的并集为 P(A)P(A)
  • 对于所有的 iji\not=jP(Bi)P(B_i)P(Bj)P(B_j) 无交。

形状是有 ID 的,SS 的 ID 为 00,您在解决方案中生成的 ID 为 1,2,3,1,2,3,\ldots

剪刀将会剪开一个现有的形状 AA,并产生 AA 的一个划分 B1,B2,BkB_1,B_2,\ldots B_k

在上图中,形状 AA 被划分成了 B1,B2,B3B_1,B_2,B_3 三个三角形。其中描述红色三角形的一种方式为 3 3 1 6 1 5.1 4

胶带可以粘合存在的形状 A1,AkA_1,\ldots A_k 并使其变成形状 BB,要执行这个操作,需要给定 C1,,CkC_1,\ldots,C_k 和最终形状 BB 并满足如下要求:

  • CiC_i 等价于 AiA_i
  • C1,,CkC_1,\ldots,C_kBB 的划分。

通俗地说,你选择了形状 BB,然后展示如何把每个存在的 AiA_i 移动到构成 BB 的正确的位置 CIC_I。注意形状 BB 需要分配一个新 ID,但 CiC_i 不需要。

输入格式

第一行为形状 SS

第二行为形状 TT

输出格式

每当使用剪刀时,按如下格式输出:

scissors
id(A) k
B_1
B_2
...
B_k

每当使用胶布时,按如下格式输出:

tape
k id(A_1) ... id(A_k)
C_1
C_2
...
C_k
B

您的输出需要保证以下限制:

  • 输出的所有点坐标在 [107,107][-10^7,10^7] 之内。
  • 输出的每个形状最多能有 100100 个点。
  • 每次操作中,1k1001\le k\le 100
  • 操作数不多于 2×1032\times 10^3
  • 输出中所有形状的总点数不超过 2×1042\times 10^4
  • 最后必须只剩下一个形状,且这个形状等价于 TT
6 0 0 6 0 6 4 5 4 5 9 0 9
4 0 0 7 0 7 7 0 7

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
4 0 0 3 0 3 3 0 3
4 7 -1 10 -1 11 2 8 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

4 0 0 9 0 9 1 0 1
4 0 0 3 0 3 3 0 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

提示

样例解释

样例 1 解释

上左图是使用剪刀操作后的原始图形,右侧是使用胶带后对应 CiC_i

样例 2 解释

请注意,目标和您的最后达成的多边形只需等价即可,不需完全相同。

样例 3 解释

下图显示了这个样例输出的三个阶段:

数据范围及限制

对于 100%100\% 的数据,保证 SSTT 的点数 10\le 103\ge 3,输入的所有点坐标在 [106,106][-10^6,10^6] 之内,无三点共线的情况,P(S)P(S)P(T)P(T) 的面积相等。

如果一个形状的顶点分别为 (0,0),(x,0),(0,y),(x,y)(0,0),(x,0),(0,y),(x,y)x,yx,y 为正整数,则称它为好矩形。

如果一个形状是好矩形且 x=yx=y,则称它为好正方形。

如果多边形 P(A)P(A) 的每个内角都小于 180180 度,则称形状 AA 为严格凸多边形。

详细子任务限制如下: | 子任务编号 | 限制 | 分数 | | :-: | :-: | :-: | | 1 | SSTT 是好矩形且输入的所有点坐标在 [1,10][1,10] 之内 | 55 | | 2 | SS 是好矩形且 x>yx>yTT 是好正方形 | 1313 | | 3 | S,TS,T 是好矩形 | 1212 | | 4 | SS 是三角形,TT 是好正方形 | 1414 | | 5 | S,TS,T 均是三角形 | 1010 | | 6 | SS 是严格凸多边形,TT 是好矩形 | 1616 | | 7 | TT 是好矩形 | 1111 | | 8 | 无特殊限制 | 1919 |

说明

本题译自 Central-European Olympiad in Informatics 2019 Day 2 T3 Scissors and Tape