#P13721. [GCPC 2024] Fair Fruitcake Fragmenting

    ID: 13720 远端评测题 3000ms 512MiB 尝试: 0 已通过: 0 难度: 9 上传者: 标签>计算几何2024Special JudgeICPC双指针 two-pointer

[GCPC 2024] Fair Fruitcake Fragmenting

Description

Frida 的生日快到了,作为她最好的朋友,你当然为她烤了一个蛋糕。 你知道 Frida 喜欢旋转对称,所以你打算烤一个从上方看起来在旋转 180180^\circ 后依然相同的蛋糕。 当然,你本可以简单地烤一个普通的圆形蛋糕,但没有一个完美的圆形蛋糕模具,这听起来比做起来要容易。 因此,你决定烤一个可以用直线段描述形状的蛋糕。

:::align{center}

图 F.1:样例输入 2 的可视化。像 S 形的蛋糕可以用一刀分成红色和蓝色两部分。

:::

然而,在你完成蛋糕后,你发现你还想把蛋糕切成两等份,一份给 Frida,一份给你自己。 更准确地说,你想知道是否可以沿着一条无限长的直线将蛋糕精确地分成两部分,每部分的重量相等。 你可以假设蛋糕的密度和高度都是均匀的。

Input Format

输入包括:

  • 一行包含一个偶数整数 nn4n1054 \leq n \leq 10^5),表示描述蛋糕形状所需的点的数量。
  • 接下来的 nn 行,每行包含两个整数 xxyy0x,y1060 \leq x, y \leq 10^6),表示蛋糕边界上一点的 xxyy 坐标。

关于蛋糕形状,给出以下额外保证:

  • 蛋糕具有 180180^\circ 旋转对称性。
  • 点按逆时针顺序给出。
  • 任意三个连续的点不共线。
  • 形状是简单多边形(没有线段相交,只有相邻线段在端点处相接)。

Output Format

输出所需直线上的两个不同点,格式为 x1/c1x_1/c_1 y1/d1y_1/d_1 x2/c2x_2/c_2 y2/d2y_2/d_2,其中 xi|x_i|yi|y_i|ci|c_i|di|d_i| 均为整数且不超过 10910^9xi/cix_i/c_i 表示第 ii 个点的第一个坐标,yi/diy_i/d_i 表示第二个坐标(1i21 \leq i \leq 2)。如果某个分数的分母为 11,你可以只输出分子。分数不需要约分。如果不存在这样的直线,输出“impossible”。

可以证明,如果存在所需的直线,则一定可以用上述格式表示。

4
0 0
2 0
2 2
0 2
1 1 1337/42 3141/1000
20
7 1
8 2
8 5
7 6
4 6
4 4
3 4
3 7
6 7
7 8
2 8
1 7
1 4
2 3
5 3
5 5
6 5
6 2
3 2
2 1
11 13 -2 -4
10
11 5
10 2
12 6
2 2
7 3
1 1
2 4
0 0
10 4
5 3
impossible

Hint

由 ChatGPT 4.1 翻译