QOJ.ac

QOJ

时间限制: 5 s 内存限制: 512 MB 总分: 100

#861. 巡逻无人机

统计

你正试图从博物馆中窃取一颗极其珍贵的钻石王冠。诱人之处在于(由于预算削减),所有的警卫都被一台巡逻博物馆主大厅的自动无人机所取代。然而,令人望而却步的是,这台无人机配备了非常现代化的武器,如果你引起了它的注意,很可能会被粉碎。

幸运的是,你已经做好了功课,对无人机的工作原理有了相当深入的了解。想象一下,大厅是一个欧几里得平面,被划分为单位正方形网格。中心单元格 $(0, 0)$ 存放着王冠。无人机有一个简单的处理单元,存储两样东西:它当前的位置 $(x, y)$ 和指令序列,用字母 'N'、'E'、'S'、'W' 表示。每一分钟,无人机根据序列的第一个字母(北、南、西或东)移动到相邻位置,相应地改变存储的位置,然后将这个字母移到序列的末尾,以便在下一分钟访问下一个字母。如果指令序列为空,无人机则什么也不做。保证这些指令描述了一个闭合回路,且无人机从不进入 $(0, 0)$ 单元格。

现在,无人机处于位置 $(x_0, y_0)$,并拥有一个指令字符串 $T$。你可以通过一些巧妙的黑客手段修改无人机的内存——你的目标是达到一种状态,即无人机处于相同的位置 $(x_0, y_0)$,但拥有不同的字符串 $T'$。不幸的是,你的黑客策略受到了一定限制——每一分钟,你只能访问字符串的前两个字母,并执行任意数量的以下操作:

  • 删除字符串的前两个字母,但仅当它们是 “NS”、“SN”、“EW” 或 “WE” 时;
  • 在字符串前端添加两个字母 “NS”、“SN”、“EW” 或 “WE”;
  • 交换字符串的前两个字母(可以交换任意字母组合)。

此外,无人机上还实现了一个碰撞检测系统,如果当前的指令集可能导致无人机到达 $(0, 0)$,它会检测到。在这种情况下会触发警报——这是你必须不惜一切代价避免的情况。

请找到一系列黑客操作,使无人机在内存中拥有目标序列 $T'$ 的同时,处于位置 $(x_0, y_0)$。

输入格式

输入的第一行包含一个整数 $z$ ($1 \le z \le 100$),表示测试用例的数量。接下来是各测试用例的描述。

每个测试用例的第一行包含两个整数 $x_0, y_0$ ($-1000 \le x_0, y_0 \le 1000$),表示无人机的初始位置。$x_0, y_0$ 中至少有一个不为零。

第二行包含两个数字 $n, m$ ($2 \le n, m \le 2000$),分别表示当前字符串 $T$ 和目标字符串 $T'$ 的长度。

接下来的两行各包含一个字符串,长度分别为 $n$ 和 $m$,表示 $T$ 和 $T'$,仅由字母 N, S, E, W 组成。

保证当前序列和目标序列不同。此外,两者都描述了闭合回路,且这些回路在路径上的任何时刻都不会经过 $(0, 0)$。

所有测试用例中的字母总数不超过 $20\,000$。

输出格式

对于每个测试用例,如果无法满足任务要求,请在单行中输出 “NO”。否则,输出 “YES”,并在下一行输出解决方案描述。解决方案必须仅由符号 $\{N, S, E, W, -, R, C\}$ 组成,其中每个字符表示一个单一的黑客操作:

  • 符号 'N' 表示在字符串前端添加 “NS”。
  • 类似地,符号 'S'、'E' 和 'W' 表示在前端添加 “SN”、“EW” 和 “WE”。
  • 符号 'R' 表示删除字符串的前两个字母——仅当这些字母是 “NS”、“SN”、“EW” 或 “WE” 时才允许。
  • 符号 'C' 表示交换前两个字母。
  • 符号 '-' 表示你等待该分钟的剩余时间(直到无人机移动到下一条指令)。

注意,一分钟内可以进行多次黑客操作。你不需要最小化解决方案的长度,但操作描述的字符数不得超过 $2 \cdot 10^7$。在输出的最后一分钟结束时,无人机的字符串和位置必须与目标匹配。不允许对长度不超过一个字母的字符串进行删除或交换操作。在任何时刻,无人机序列所描述的回路都不能经过 $(0, 0)$。

样例

样例输入 1

2
1 0
10 10
NNWWSSSEEN
NWWSSSEENN
-1 0
8 8
NEESSWWN
SEENNWWS

样例输出 1

YES
-C-C-R--S-C-C---
NO

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
#186EditorialOpen题解jiangly2025-12-12 23:58:48View

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.