CF1294B Collecting Packages
题目描述
有一个机器人在仓库中,想要收集 $n$ 个包裹。仓库可以用一个坐标网格表示。最初,机器人位于点 $(0, 0)$。第 $i$ 个包裹位于点 $(x_i, y_i)$。保证没有两个包裹在同一个点上,也保证点 $(0, 0)$ 没有包裹。
机器人有些损坏,只能向上('U')和向右('R')移动。也就是说,每次移动,机器人可以从点 $(x, y)$ 移动到 $(x+1, y)$ 或 $(x, y+1)$。
如上所述,机器人想以任意顺序收集所有 $n$ 个包裹,并且希望用最少的步数完成。如果有多种可能的路径,机器人希望选择字典序最小的路径。
长度为 $n$ 的字符串 $s$ 的字典序小于长度为 $n$ 的字符串 $t$,当存在某个下标 $1 \le j \le n$,使得对于所有 $i$ 从 $1$ 到 $j-1$ 有 $s_i = t_i$,且 $s_j < t_j$。这就是标准的字符串比较方式,就像在字典中一样。大多数编程语言都是这样比较字符串的。
输入格式
输入的第一行包含一个整数 $t$($1 \le t \le 100$),表示测试用例的数量。接下来是 $t$ 组测试用例。
每个测试用例的第一行包含一个整数 $n$($1 \le n \le 1000$),表示包裹的数量。
接下来的 $n$ 行,每行包含两个整数 $x_i$ 和 $y_i$($0 \le x_i, y_i \le 1000$),表示第 $i$ 个包裹的 $x$ 坐标和 $y$ 坐标。
保证没有两个包裹在同一个点上,也保证点 $(0, 0)$ 没有包裹。
所有测试用例中 $n$ 的总和不超过 $1000$。
输出格式
对于每个测试用例,输出答案。
如果无法从 $(0, 0)$ 出发以某种顺序收集所有 $n$ 个包裹,第一行输出 "NO"。
否则,第一行输出 "YES"。然后输出最短路径——一个只包含字符 'R' 和 'U' 的字符串。在所有这样的路径中,选择字典序最小的路径。
注意,本题中只能输出大写的 "YES" 和 "NO",如 "Yes"、"no"、"YeS" 等均不被接受。
说明/提示
对于示例中的第一个测试用例,最优路径 RUUURRRRUU 如下图所示:

由 ChatGPT 4.1 翻译