P17168 [CEOI 2026] Vim

题目描述

恐怕很难找到比老派的 Vim 更加**极客**的东西了。在这个编辑器中,我们能做到许多在“普通”编辑器里只能想象的事情——当然,前提是愿意投入一周时间学习,再花一个月练习,让那些不同寻常但功能强大的命令成为我们的“肌肉记忆”。和其他编辑器一样,Vim 中也有一个**光标**,它始终位于某个字符上。初始时,光标位于文本的第一个字符上。Vim 中同样还有一个**剪贴板**,用于存储文本片段,并间接用于复制和移动文本。剪贴板初始为空。 本题假定编辑器最初恰好有一个 `-`(减号)字符,目标是最终得到恰好 $n$ 个连续的减号。我们将使用以下 $4$ 条命令来实现这一目标: - `h`:如果光标位于第一个字符上,则该命令不执行任何操作;否则,光标向左移动一个字符。 - `l`:如果光标位于最后一个字符上,则该命令不执行任何操作;否则,光标向右移动一个字符。 - `Y`:将从光标所在位置开始、一直延伸到文本末尾的字符序列复制到剪贴板,并“覆盖”剪贴板先前的所有内容。(如果光标位于文本的第一个字符上,则整段文本都会被复制到剪贴板。) - `P`:将剪贴板中存储的文本复制一份,插入到光标当前所在字符之前,并将光标移动到最后一个新插入的字符上。剪贴板内容不会改变。如果剪贴板为空,则不执行任何操作。 编写一个程序,读入 $n$,输出在上述条件下使 Vim 中最终恰好出现 $n$ 个连续 `-` 字符所需的最少命令数。程序还应输出一个达到最少命令数的命令序列示例。

输入格式

第一行包含测试用例数量 $t$。接下来的 $t$ 行分别给出每个测试用例期望的字符串长度 $n$。

输出格式

对于每个测试用例,在单独一行中输出所需的最少命令数,以及一个满足要求的命令序列示例。

说明/提示

### 样例解释 如下表所示,在第一个测试用例中,命令序列 `YPYPhPYPPP` 可以得到正确结果。屏幕(Screen)列中的 `=` 字符表示光标当前所在的 `-` 字符。 | 步骤 | 命令 | 屏幕 | 剪贴板 | |:-:|:-:|:-:|:-:| | $0$ | | `=` | (空) | | $1$ | `Y` | `=` | `-` | | $2$ | `P` | `=-` | `-` | | $3$ | `Y` | `=-` | `--` | | $4$ | `P` | `-=--` | `--` | | $5$ | `h` | `=---` | `--` | | $6$ | `P` | `-=----` | `--` | | $7$ | `Y` | `-=----` | `-----` | | $8$ | `P` | `-----=-----` | `-----` | | $9$ | `P` | `---------=------` | `-----` | | $10$ | `P` | `-------------=-------` | `-----` | ### 限制条件 - $1\le t\le 100$ - $1\le n\le 10^7$ ### 子任务 如果只输出了正确的命令数,却没有输出命令序列示例,或者输出的示例不正确,则只能获得该子任务一半的分数。 - 子任务 $1$($20$ 分):$n\le 100$ - 子任务 $2$($8$ 分):$n\le 1000$ - 子任务 $3$($18$ 分):$n\le 10^4$ - 子任务 $4$($18$ 分):$n\le 10^5$ - 子任务 $5$($18$ 分):$n\le 10^6$ - 子任务 $6$($18$ 分):无额外限制。 翻译由 ChatGPT-5.6 完成