#P1002. 飞翔在宇宙的不可思议的巫女
飞翔在宇宙的不可思议的巫女
飞翔在宇宙的不可思议的巫女
- 时间限制:2 秒
- 内存限制:512 MB
题目描述
乐园的巫女博丽灵梦正在梦境世界中穿梭,寻找梦境的管理者哆来咪。众所周知,哆来咪所在的梦境世界,地面上布满了网格,因此可以把梦境世界看作一张带网格的二维地图。博丽灵梦最初位于点 (0, 0),而她想要找到的哆来咪位于点 (x, y)。
灵梦每次移动的位移由一个向量 (a, b) 描述:一次移动中,她沿第一坐标移动 a 个单位,同时沿第二坐标移动 b 个单位。初始时灵梦处于静止状态,即 (a, b) = (0, 0)。
灵梦连续地进行移动。每一次移动执行以下两个操作:
- 在当前位移向量 (a, b) 的基础上,必须将 a、b 中恰好一个的值增加 1;
- 然后灵梦从点 (p, q) 飞到点 (p + a, q + b)。
a 和 b 的值只能增加,不能减少。
由于梦境世界的范围有限,它由矩形 [0, x] × [0, y] 表示。如果灵梦在某次移动后离开了这个矩形区域,她就会进入不稳定的空间区域并被摧毁。
灵梦可以在任意多次移动之后结束旅程。由于不一定能准确到达哆来咪所在的位置,她希望停在一个有效点上(有效点指落在矩形 [0, x] × [0, y] 内的点,包含边界),并且该点离目标点 (x, y) 尽可能近。具体地,她希望 (p − x)² + (q − y)² 的值尽可能小。
请你帮助灵梦选择移动的次数,并决定每次移动是增加 a 还是增加 b,使她的终点是一个使 (p − x)² + (q − y)² 最小的有效点。
输入格式
每个测试包含多个测试用例。第一行包含一个整数 t(1 ≤ t ≤ 100),表示测试用例的数量。接下来是每个测试用例的描述。
每个测试用例的一行包含两个整数 x 和 y(1 ≤ x, y ≤ 10^8)——哆来咪所在位置(目标点)的坐标。
输出格式
对每个测试用例,输出一行由字符 X 和 Y 组成的字符串 s,描述灵梦的最佳行程。
字符串 s 的长度必须等于移动次数。字符 s_i 描述灵梦在第 i 次移动中的行动:
- 若 s_i =
X,则灵梦将 a 增加 1,然后用得到的向量进行移动; - 若 s_i =
Y,则灵梦将 b 增加 1,然后用得到的向量进行移动。
字符串描述的行程必须满足题目中的全部条件,并且终点到目标点 (x, y) 的欧氏距离平方尽可能小。可以证明,在题目限制下,任意最优答案包含的移动次数都不超过 20000。如果存在多个最优答案,输出其中任意一个。
样例
输入:
7
1 1
2 1
4 2
5 4
3 7
1 100
231 157
输出:
X
XY
XYX
XYY
YXYY
YYYYYYYYYYYYY
XXXXXXXXXXYYYYYYYYYYYYYYYYX
样例解释
测试用例 1: 字符串 X 描述一次移动。灵梦将 a 增加 1,然后从 (0, 0) 移动到 (1, 0)。到目标点 (1, 1) 的距离平方为 (1−1)² + (0−1)² = 1。
测试用例 2: 字符串 XY 把灵梦准确带到了目标点:
(0, 0) → (1, 0) → (2, 1)
测试用例 3: 字符串 XYX 描述的移动序列为:
(0, 0) → (1, 0) → (2, 1) → (4, 2)
灵梦准确到达了目标点 (4, 2)。
测试用例 4: 字符串 XYY 把灵梦带到了点 (3, 3)。到目标点 (5, 4) 的距离平方为 (3−5)² + (3−4)² = 5。另一个最优答案,例如 XYX,可以把灵梦带到点 (4, 2)。