#L4315. 「ROIR 2023 Day1」彩色点

    ID: 3672 传统题 1000ms 512MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>计算几何状态转移与循环检测哈希与记忆化图论(有向图遍历)分类讨论(颜色判断)

「ROIR 2023 Day1」彩色点

题目描述

译自 ROI Regional 2023 Day1 T4. Разноцветные точки

我们来看平面上的nn个点,编号从11nn,记为P1,P2,,PnP_1, P_2, \ldots, P_n,第ii个点的坐标为(xi,yi)(x_i, y_i)

考虑以下过程。选择一个起始点ii和一个紧随其后的点jjiji \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个点,如图11所示,t=4t=4。假设起始点编号为11,紧随其后的点编号为22。从点P2P_2出发,绘制向量P1P2\overrightarrow{P_1 P_2},并按逆时针方向排序所有点(除了P2P_2)。在图22中,虚线表示向量P1P2\overrightarrow{P_1 P_2},为了方便,还绘制了从点P2P_2到其他所有点的向量。

1166个点的例子

22:向量P1P2\overrightarrow{P_1 P_2}以及从点P2P_2到其他所有点的向量

点将按以下顺序排序:P3,P5,P1,P6,P4P_3, P_5, P_1, P_6, P_4。因此,目标点编号为66。然后点22成为起始点,点66成为紧随其后的点。

在图33中,展示了起始点为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

在图44中,展示了起始点为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开始,并进入循环。

33:起始点为22,紧随其后的点为66的过程

44:起始点为66,紧随其后的点为11的过程

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

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

确定每个点的颜色。

输入格式

第一行包含两个整数nntt2n1000,1tn12 \leq n \leq 1000, 1 \leq t \leq n-1)。

接下来的nn行中,每行包含两个整数xix_iyiy_i109xi,yi109-10^9 \leq x_i, y_i \leq 10^9)。保证没有两个点重合。

输出格式

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

样例11

输入

646 4

11-1 -1

121 -2

424 -2

242 -4

232 3

45-4 -5

输出

GGBBRGGGBBRG

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

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

可以证明,点P3P_3不是绿色的,但它是蓝色的,因为可以选择点11作为紧随其后的点,点33将至少再成为一次起始点。起始点为11,紧随其后的点为33的过程在图556677中展示。

对于起始点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。从题目中的例子我们知道,过程将进入循环,访问点661122

55:起始点为33,紧随其后的点为11的过程

66:起始点为11,紧随其后的点为33的过程

77:起始点为33,紧随其后的点为66的过程

样例22

输入

212 1

111 1

222 2

输出

GGGG

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

数据范围与提示

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

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