#P13122. [GCJ 2019 #3] Napkin Folding
[GCJ 2019 #3] Napkin Folding
Description
Chalk 一直在和朋友们积极地环游世界,在最酷的地方拍照。最近,他来到了欧洲,研究了餐巾折叠的历史。从那以后,Chalk 就开始收集各种各样的餐巾来练习餐巾折叠艺术。
Chalk 的餐巾可以被定义为简单多边形。简单多边形是指没有边相交(除了相邻边在公共顶点处相交)的多边形。多边形的每个顶点都恰好属于两条边。
Chalk 折叠餐巾时,首先会在餐巾上画出折叠图案。折叠图案是一组 条线段,这些线段画在定义餐巾的多边形上。每条线段连接多边形边界上的两个有理数坐标点,并且完全位于多边形内部。折叠图案中的任意两条线段不能相交或重叠,除了可能在公共端点处。包含 条线段的折叠图案会将餐巾分成 个多边形区域。如果存在一条连续的路径(不一定是直线),连接两个点且不与多边形的任何边或折叠图案中的任何线段(即使是端点)相交,则这两个点属于同一区域。
Chalk 只对整齐的折叠图案感兴趣。折叠图案是整齐的,当且仅当与同一折叠线段 相邻的任意两个区域关于 对称。这意味着,如果沿着该线段折叠餐巾,这两个区域会完全重合。
下图展示了一个包含 个区域的整齐折叠图案。

Chalk 已经用整齐的折叠图案成功折叠了他的大部分餐巾。但他收藏中还有一些餐巾,始终找不到整齐的折叠图案。对于这些餐巾中的每一块,Chalk 需要你的帮助,找出一个包含 个区域的整齐折叠图案,或者判断不存在这样的整齐折叠图案。
Input Format
输入的第一行包含测试用例数 。接下来是 组测试数据。每组测试数据的第一行包含两个整数 和 ,分别表示定义 Chalk 餐巾的多边形的顶点数和需要用整齐折叠图案分割出的区域数(即折叠图案包含 条线段)。
定义餐巾的多边形用一组 个顶点表示,按顺时针方向沿多边形边界依次给出,起点任意。接下来的 行表示该顶点列表。第 行包含两个整数 和 ,表示第 个点在二维平面上的坐标为 。
Output Format
对于每组测试数据,输出一行 Case #x: y,其中 是测试用例编号(从 1 开始), 为 POSSIBLE 表示存在包含 个区域的整齐折叠图案,IMPOSSIBLE 表示不存在。
如果存在整齐折叠图案,将接着输出 行,每行表示一条折叠线段,顺序任意。每行格式为 ,其中 和 是线段的两个端点,顺序任意。、、、 都应为 的形式,其中 和 是正整数(无前导零),且互质,表示有理数 。 与 /、/ 与 之间不得有空格。
4
4 2
1 1
1 2
2 2
2 1
3 2
1 1
1 2
2 1
8 2
1 3
3 5
5 5
4 4
7 3
5 1
4 2
3 1
8 2
1 3
3 5
4 4
5 5
7 3
5 1
4 2
3 1
Case #1: POSSIBLE
1/1 2/1 2/1 1/1
Case #2: POSSIBLE
1/1 1/1 3/2 3/2
Case #3: IMPOSSIBLE
Case #4: POSSIBLE
1/1 3/1 7/1 3/1
1
10 8
4 1
3 1
2 2
2 3
1 3
1 4
2 4
3 3
3 2
4 2
Case #1: POSSIBLE
3/1 1/1 4/1 2/1
3/1 1/1 3/1 2/1
2/1 2/1 3/1 2/1
2/1 2/1 3/1 3/1
2/1 3/1 3/1 3/1
2/1 3/1 2/1 4/1
1/1 3/1 2/1 4/1
Hint
样例解释
注意:样例 2 不适用于测试集 1。只有样例 1 会在运行测试集 1 前被测试(与通常的样例测试方式一致)。此外,样例 2 不会在运行测试集 2 前被测试。
对于样例 1, 时,可以用任意一条虚线画出整齐的折叠图案:

对于样例 2, 时,可以如下画出整齐的折叠图案:

对于样例 3,没有整齐的折叠图案:

对于样例 4,存在两种可能的整齐折叠图案,:

对于测试集 2 的样例, 时,可以如下画出整齐的折叠图案:

数据范围
- 。
- 。
- ,对所有 。
- ,对所有 。
- 所有 个点按顺时针顺序给出。
- 多边形任意两条相邻边不共线。
- 多边形为简单多边形,面积严格大于零。
- 除了相邻边在公共端点处外,多边形任意两条边不相交。
测试集 1(4 分,公开)
- 。
测试集 2(39 分,隐藏)
- 。
由 ChatGPT 4.1 翻译
京公网安备 11011102002149号