#P15886. [Roi2023 Regional]彩色点
[Roi2023 Regional]彩色点
题目描述
平面上有 个点,编号为 到 ,分别记为
第 个点的坐标为 。
考虑如下过程。首先选择一个起始点编号 和一个在它之后的下一点编号 ,其中 ,同时给定一个整数 。接下来按下面的算法确定一个目标点编号 。
考虑从点 指向点 的向量 。把这个向量平移到以点 为起点。然后将除第 个点以外的所有点排序:排序关键字为从这个平移后的向量方向开始,逆时针旋转到对应点方向所经过的角度;若角度相同,则按到点 的距离从小到大排序。
在上述排序中,按从 开始编号,第 个点被选为目标点 。
随后,点 变成新的起始点,点 变成新的下一点,再按照同样的规则计算新的目标点。这个过程无限重复。
为了更好地理解这个过程,考虑如下例子。假设有 个点,如图 1 所示,且 。如果起始点是 ,下一点是 ,则把向量 平移到点 ,再从该方向开始逆时针排序所有除 外的点。图 2 中虚线表示平移后的向量,同时画出了从 指向其他点的向量。

图 1、图 2:六个点的例子,以及从 出发的排序过程
这些点的顺序为:
因此第 个点是 ,目标点编号为 。接下来点 变成新的起始点,点 变成新的下一点。
图 3 展示了起始点为 、下一点为 时的过程。此时排序结果为:
注意,点 排在点 之前,是因为二者方向角相同,而 到 的距离小于 到 的距离。因此目标点为 。
图 4 展示了起始点为 、下一点为 时的过程。注意,这时平移到 的向量 与从 指向 的向量 方向相同,图中用实线表示。此时排序结果为:
因此目标点为 。接下来过程又会回到“起始点为 、下一点为 ”的状态,于是进入循环。

从 和 开始的过程
现在需要把每个点染成三种颜色之一。第 个点的颜色按如下规则确定:
- 如果存在某个点 ,使得选择点 作为起始点、点 作为下一点后,在上述无限过程中,点 会作为起始点出现无限多次,则点 染成绿色。
- 如果点 没有被染成绿色,并且存在某个点 ,使得选择点 作为起始点、点 作为下一点后,在上述过程中,点 还会至少再作为起始点出现一次,则点 染成蓝色。
- 如果点 既不是绿色也不是蓝色,则染成红色。
请确定每个点应该染成什么颜色。
输入格式
第一行包含两个整数 。
接下来 行,每行包含两个整数 ,表示第 个点的坐标。
输出格式
输出一个长度为 的字符串。第 个字符表示第 个点的颜色:
- 若第 个点为绿色,输出
G; - 若第 个点为蓝色,输出
B; - 若第 个点为红色,输出
R。
数据范围
保证任意两个点不重合。
子任务
每个子任务的分数只有在该子任务及其所有依赖子任务全部通过时才会获得。
| 子任务 | 分值 | 附加限制 | 依赖子任务 | 评测信息 |
|---|---|---|---|---|
| 1 | 10 | ,所有点都在同一直线上 | 无 | 第一处错误 |
| 2 | 15 | 所有点都在同一直线上 | 1 | |
| 3 | 10 | ,保证没有蓝色点 | 无 | |
| 4 | 1, 3 | |||
| 5 | 15 | ,保证没有蓝色点 | 3 | |
| 6 | 1, 3, 4, 5 | |||
| 7 | 5 | ,所有点都是严格凸多边形的顶点,并按逆时针顺序给出 | 无 | |
| 8 | 20 | 无 | 1-7 |
样例 1
输入
6 4
-1 -1
1 -2
4 -2
2 -4
2 3
-4 -5
输出
GGBBRG
样例 2
输入
2 1
1 1
2 2
输出
GG
样例说明
考虑样例 1 中的一些点。
点 是绿色点,因为可以选择点 作为下一点,之后过程会无限次访问以 为起始点的状态。这个例子已经在题面前面的说明中展示。
可以证明点 不是绿色点,但它是蓝色点。因为可以选择点 作为下一点,之后点 会至少再作为起始点出现一次。从起始点 、下一点 开始的过程如图 5、图 6、图 7 所示。
当起始点为 、下一点为 时,排序结果为:
因此点 成为目标点。接下来起始点为 、下一点为 ,排序结果为:
因此点 成为目标点。最后起始点为 、下一点为 ,排序结果为:
因此点 成为目标点。接下来过程会继续到起始点为 、下一点为 的状态。根据题面前面的例子可知,过程随后会进入循环,并不断访问编号为 的点。

样例 1 中说明点 为蓝色的过程

在样例 2 中,容易看出:无论选哪个点作为起始点、另一个点作为下一点,目标点都会变成原来的起始点。因此两个点都是绿色。