#P4315. 「ROIR 2023 Day1」彩色点

「ROIR 2023 Day1」彩色点

题目描述

译自 ROI Regional 2023 Day1 T4. Разноцветные точки 好的,我会用自己的理解来翻译并调整措辞,使其更生动流畅自然且易于理解。以下是翻译后的内容:

我们来看平面上的 nn 个点,编号从 11 到 nn,记为 P1,P2,…,PnP_{1}, P_{2}, \ldots, P_{n},第 ii 个点的坐标为 (xi,yi)\left(x_{i}, y_{i}\right)。

考虑以下过程。选择一个起始点 ii 和一个紧随其后的点 jj (i≠j)(i \neq j),以及一个整数 tt。然后按以下算法计算目标点 kk 的编号。考虑从点 PiP_{i} 指向点 PjP_{j} 的向量 PiPj→\overrightarrow{P_{i} P_{j}}。将所有点(除了 jj)按逆时针方向从向量 PiPj→\overrightarrow{P_{i} P_{j}} 的方向排序。如果角度相同,则按到点 jj 的距离排序。目标点 kk 是排序后第 tt 个点。然后点 jj 成为起始点,点 kk 成为紧随其后的点,重复上述算法计算新的目标点。这个过程无限重复。

为了更好地理解这个过程,我们来看一个例子。假设有 66 个点,如图 1 所示,t=4t=4。假设起始点编号为 11,紧随其后的点编号为 22。从点 P2P_{2} 出发,绘制向量 P1P2→\overrightarrow{P_{1} P_{2}},并按逆时针方向排序所有点(除了 P2P_{2})。在图 2 中,虚线表示向量 P1P2→\overrightarrow{P_{1} P_{2}},为了方便,还绘制了从点 P2P_{2} 到其他所有点的向量。

图 1:6 个点的例子\text{图 1:6 个点的例子}

$$\text{图 2:向量} \overrightarrow{P_{1} P_{2}} \text{以及从点} P_{2} \text{到其他所有点的向量} $$

点将按以下顺序排序:P3,P5,P1,P6,P4P_{3}, P_{5}, P_{1}, P_{6}, P_{4}。因此,目标点编号为 66。然后点 22 成为起始点,点 66 成为紧随其后的点。

在图 3 中,展示了起始点为 22,紧随其后的点为 66 的过程。点将按以下顺序排序:P4,P3,P2,P1,P5P_{4}, P_{3}, P_{2}, P_{1}, P_{5}。注意,点 P1P_{1} 在这个列表中排在 P5P_{5} 之前,因为点 P1P_{1} 到点 P6P_{6} 的距离小于点 P5P_{5} 到点 P6P_{6} 的距离。目标点编号为 11。

在图 4 中,展示了起始点为 66,紧随其后的点为 11 的过程。注意,在这种情况下,从点 P1P_{1} 出发的向量 P6P1→\overrightarrow{P_{6} P_{1}} 与从点 P1P_{1} 出发的向量 P1P5→\overrightarrow{P_{1} P_{5}} 重合。这些向量用实线表示。点将按以下顺序排序:P5,P6,P4,P2,P3P_{5}, P_{6}, P_{4}, P_{2}, P_{3}。目标点编号为 22。因此,接下来过程将从起始点 11 和紧随其后的点 22 开始,并进入循环。

图 3:起始点为 2,紧随其后的点为 6 的过程

图 4:起始点为 6,紧随其后的点为 1 的过程

我们将每个点涂成三种颜色之一。第 ii 个点的颜色定义如下:

  • 如果存在一个点 jj,选择点 ii 作为起始点,点 jj 作为紧随其后的点,在上述过程中点 ii 将无限次成为起始点,则点 ii 被涂成绿色。
  • 如果点 ii 未被涂成绿色,并且存在一个点 jj,选择点 ii 作为起始点,点 jj 作为紧随其后的点,在上述过程中点 ii 至少再成为一次起始点,则点 ii 被涂成蓝色。
  • 如果点 ii 既未被涂成绿色,也未被涂成蓝色,则点 ii 被涂成红色。

确定每个点的颜色。

输入格式

第一行包含两个整数 nn 和 tt (2≤n≤1000,1≤t≤n−1)(2 \leq n \leq 1000, 1 \leq t \leq n-1)。

接下来的 nn 行中,每行包含两个整数 xix_{i} 和 yiy_{i} (−109≤xi,yi≤109)(-10^9 \leq x_{i}, y_{i} \leq 10^9)。保证没有两个点重合。

输出格式

输出一个由 nn 个字符组成的字符串:第 ii 个字符表示第 ii 个点的颜色。绿色点用字母 G 表示,蓝色点用字母 B 表示,红色点用字母 R 表示。

6 4
-1 -1
1 -2
4 -2
2 -4
2 3
-4 -5
GGBBRG

我们来看第一个样例中的一些点。

点 P1P_{1} 被涂成绿色,因为可以选择点 P2P_{2} 作为紧随其后的点,过程将无限次访问点 P1P_{1}。这个例子在题目中已经解释过。

可以证明,点 P3P_{3} 不是绿色的,但它是蓝色的,因为可以选择点 11 作为紧随其后的点,点 33 将至少再成为一次起始点。起始点为 11,紧随其后的点为 33 的过程在图 5、6 和 7 中展示。

对于起始点 33 和紧随其后的点 11,点将按以下顺序排序:P6,P4,P2,P3,P5P_{6}, P_{4}, P_{2}, P_{3}, P_{5}。点 33 成为目标点。然后对于起始点 11 和紧随其后的点 33,点将按以下顺序排序:P5,P1,P2,P6,P4P_{5}, P_{1}, P_{2}, P_{6}, P_{4}。点 66 成为目标点。最后,对于起始点 33 和紧随其后的点 66,点将按以下顺序排序:P4,P3,P2,P1,P5P_{4}, P_{3}, P_{2}, P_{1}, P_{5}。点 11 成为目标点。然后

过程继续,起始点为 66,紧随其后的点为 11。从题目中的例子我们知道,过程将进入循环,访问点 66、11 和 22。

图 5:起始点为 3,紧随其后的点为 1 的过程

图 6:起始点为 1,紧随其后的点为 3 的过程

图 7:起始点为 3,紧随其后的点为 6 的过程
2 1
1 1
2 2
GG

在第二个样例中,可以很容易地证明,如果一个点是起始点,另一个点是紧随其后的点,那么目标点将是原来的起始点。因此,这两个点都将被涂成绿色。

数据范围与提示

详细子任务附加限制及分值如下表所示。

子任务 分值 附加限制 子任务依赖
11 1010 n≤10n \leq 10,所有点在一条直线上
22 1515 所有点在一条直线上 11
33 1010 n≤10n \leq 10,保证没有蓝色点
44 1010 n≤10n \leq 10 1,31,3
55 1515 n≤100n \leq 100,保证没有蓝色点 33
66 1515 n≤100n \leq 100 1,3,4,51,3,4,5
77 55 n≥3n \geq 3,所有点是严格凸多边形的顶点,按逆时针顺序给出
88 2020 无附加限制 1∼71\sim 7