QOJ.ac

QOJ

Time Limit: 5 s Memory Limit: 512 MB Total points: 100

#861. 巡邏無人機

Statistics

你試圖從博物館中竊取一顆極其珍貴的鑽石皇冠。誘人的是(由於預算削減),所有的警衛都已被替換為一台巡邏博物館主大廳的自動無人機。然而,令人卻步的是,這台無人機配備了非常現代化的武器,如果你引起了它的注意,很可能會被分解。

幸運的是,你已經做好了功課,並對無人機的運作方式有相當程度的了解。想像大廳是一個歐幾里得平面,被劃分為單位正方形網格。中心格 $(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)$,它會偵測到。這種情況下會觸發警報——這是你必須不惜一切代價避免的情況。

請找出一個駭客操作序列,使無人機回到 $(x_0, y_0)$,且其記憶體中擁有目標序列 $T'$。

輸入格式

輸入的第一行包含一個整數 $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$ 個字元。在輸出最後一分鐘結束時,無人機的字串和位置必須與目標一致。不允許對長度為 1 或更短的字串進行移除或交換元素的操作。在任何時刻,無人機序列所描述的迴路都不能經過 $(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.