SP15735 ULM02B - Balanced Food
题目描述
计算机科学家钟爱披萨。如今医生建议他们饮食应更均衡,因此他们必须克制自己,一片一片地享用披萨,同时保证桌上的其他食物不会掉落。
由于对披萨的热爱,他们理想的桌子形状便是披萨的一块。不过,不同的科学家可能有不同的桌子大小。每个人对于披萨该切成多少片各有偏好,但都同意每片披萨必须等大。请编写程序来帮助这些披萨爱好者!
输入格式
输入包含多个测试用例。每个测试用例首先给出披萨被分成的片数 $n$。当 $n=0$ 时,输入结束。否则,$1 \le n \le 9$。接下来是9个浮点数,分别为 $p_x, p_y, r, t_x, t_y, u_x, u_y, v_x, v_y$,依次表示披萨中心 $p$ 的坐标和半径,以及围成披萨桌形状的三个点 $t, u, v$ 的坐标。这三个点按逆时针顺序给出,其中 $t$ 是桌子的中心。
披萨被视为均匀的二维圆形,从中心向正x轴方向有一条切割线。在拿掉任何一片时,剩余的部分总是保持连通。$t$ 到 $u, v$ 的距离相等,仅有微小的计算误差。桌子的形状不会超过半圆。
输出格式
对于每个测试用例,输出一种可能的吃披萨的顺序,确保在整个过程中披萨不会从桌子上掉下来。切片按逆时针顺序编号,从正 x 轴上方的第 1 片开始。
如果有多种可行的顺序,输出词典序最小的一个。如果没有这样的吃法,则输出 "impossible"。
**注意**
一个物体在凸平面上保持稳定的条件是其重心位于表面上方。物体 $s$ 重心的 x 坐标可通过计算 $(\int_s x \, ds) / (\int_s ds)$ 得到。同理,y 坐标计算方式类似,注意这些公式中的分母表示物体 $s$ 的面积。
**样例输入**
```
2 (-3.0,-1.0) 1.0 (-3.0,-1.1) (-1.5,0.4) (-4.5,0.4)
9 (2.0,1.0) 1.0 (0.0,0.0) (1.0,-1.0) (-1.0,1.0)
0
```
**样例输出**
```
2 1
impossible
```
说明/提示
- 切片数 $1 \le n \le 9$
- 输入中的所有浮点数均为合理值。
**本翻译由 AI 自动生成**