#P9895. [ICPC 2018 Qingdao R] Airdrop

[ICPC 2018 Qingdao R] Airdrop

Description

PUBG 是一款多人在线大逃杀视频游戏。在游戏中,最多一百名玩家跳伞到一个岛上,搜寻武器和装备以击杀其他玩家,同时避免自己被击杀。空投是游戏中的一个关键元素,因为空投通常携带强大的武器或大量补给,帮助玩家生存。

考虑游戏的战场是一个二维平面。一个空投刚刚降落在点 (x0,y0)(x_0, y_0)x0x_0y0y_0 都是整数),战场上的所有 nn 名玩家,其中 (xi,yi)(x_i, y_i)xix_iyiy_i 都是整数)表示第 ii 名玩家的初始位置,开始以以下模式向空投移动:

  • 如果一个活着的玩家在这个时间单位开始时的位置不等于 (x0,y0)(x_0, y_0),他将开始他的下一步移动。
    • 假设他当前在点 (x,y)(x, y)。对于他的下一步移动,他将考虑四个点 (x,y1)(x, y - 1)(x,y+1)(x, y + 1)(x1,y)(x - 1, y)(x+1,y)(x + 1, y)
    • 他将选择其中一个到空投 (x0,y0)(x_0, y_0) 的曼哈顿距离最小的点作为他下一步的目的地。回忆一下,两点 (xa,ya)(x_a, y_a)(xb,yb)(x_b, y_b) 之间的曼哈顿距离定义为 xaxb+yayb|x_a - x_b| + |y_a - y_b|
    • 如果两个或更多点到空投的曼哈顿距离相同,他将使用以下优先级规则来打破平局:(x,y1)(x, y - 1) 优先级最高,(x,y+1)(x, y + 1) 优先级第二,(x1,y)(x - 1, y) 优先级第三,(x+1,y)(x + 1, y) 优先级最低。
    • 在这个时间单位结束时,他到达他的目的地。
  • 如果一个活着的玩家在这个时间单位开始时的位置等于 (x0,y0)(x_0, y_0),他将继续用空投中的补给填满他的背包,并停留在 (x0,y0)(x_0, y_0)

但战斗很激烈,几乎不可能所有玩家都安全到达空投。如果两个或更多玩家在点 (x,y)(x', y') 相遇,且 (x,y)(x', y') 不是 (x0,y0)(x_0, y_0),他们将互相搏斗并全部阵亡,没有人存活。

BaoBao 是该游戏的忠实粉丝,对成功到达空投位置的玩家数量感兴趣,但他不知道 x0x_0 的值。给定 y0y_0 的值和每个玩家的初始位置,请帮助 BaoBao 计算对于所有 x0Zx_0 \in \mathbb{Z}Z\mathbb{Z} 是所有整数的集合,注意 x0x_0 可以是正数、零或负数),成功到达空投位置的玩家数量的最小值和最大值。

Input Format

有多个测试用例。输入的第一行包含一个整数 TT,表示测试用例的数量。对于每个测试用例:

第一行包含两个整数 nny0y_01n1051 \le n \le 10^51y01051 \le y_0 \le 10^5),表示玩家的数量和空投的 yy 值。

接下来的 nn 行中,第 ii 行包含两个整数 xix_iyiy_i1xi,yi1051 \le x_i, y_i \le 10^5),表示第 ii 名玩家的初始位置。

保证所有测试用例中 nn 的总和不超过 10610^6,并且在每个测试用例中没有两个玩家共享相同的初始位置。

Output Format

对于每个测试用例输出一行,包含两个整数 pminp_\text{min}pmaxp_\text{max},用一个空格分隔。pminp_\text{min} 表示成功到达空投位置的玩家数量的最小可能值,而 pmaxp_\text{max} 表示最大可能值。

3
3 2
1 2
2 1
3 5
3 3
2 1
2 5
4 3
2 3
1 3
4 3
1 3
0 3
2 2

Hint

我们现在解释第一个样例测试用例。

为了得到 pmin=1p_\text{min} = 1 的答案,应该考虑 x0=3x_0 = 3。下表显示了当 x0=3x_0 = 3 时每个玩家在每个时间单位结束时的位置。

为了得到 pmax=3p_\text{max} = 3 的答案,应该考虑 x0=2x_0 = 2。下表显示了当 x0=2x_0 = 2 时每个玩家在每个时间单位结束时的位置。

题面翻译由 ChatGPT-4o 提供。