#P17168. [CEOI 2026] Vim
[CEOI 2026] Vim
题目描述
恐怕很难找到比老派的 Vim 更加极客的东西了。在这个编辑器中,我们能做到许多在“普通”编辑器里只能想象的事情——当然,前提是愿意投入一周时间学习,再花一个月练习,让那些不同寻常但功能强大的命令成为我们的“肌肉记忆”。和其他编辑器一样,Vim 中也有一个光标,它始终位于某个字符上。初始时,光标位于文本的第一个字符上。Vim 中同样还有一个剪贴板,用于存储文本片段,并间接用于复制和移动文本。剪贴板初始为空。
本题假定编辑器最初恰好有一个 -(减号)字符,目标是最终得到恰好 个连续的减号。我们将使用以下 条命令来实现这一目标:
h:如果光标位于第一个字符上,则该命令不执行任何操作;否则,光标向左移动一个字符。l:如果光标位于最后一个字符上,则该命令不执行任何操作;否则,光标向右移动一个字符。Y:将从光标所在位置开始、一直延伸到文本末尾的字符序列复制到剪贴板,并“覆盖”剪贴板先前的所有内容。(如果光标位于文本的第一个字符上,则整段文本都会被复制到剪贴板。)P:将剪贴板中存储的文本复制一份,插入到光标当前所在字符之前,并将光标移动到最后一个新插入的字符上。剪贴板内容不会改变。如果剪贴板为空,则不执行任何操作。
编写一个程序,读入 ,输出在上述条件下使 Vim 中最终恰好出现 个连续 - 字符所需的最少命令数。程序还应输出一个达到最少命令数的命令序列示例。
输入格式
第一行包含测试用例数量 。接下来的 行分别给出每个测试用例期望的字符串长度 。
输出格式
对于每个测试用例,在单独一行中输出所需的最少命令数,以及一个满足要求的命令序列示例。
2
21
2
10 YPYPhPYPPP
2 YP
提示
样例解释
如下表所示,在第一个测试用例中,命令序列 YPYPhPYPPP 可以得到正确结果。屏幕(Screen)列中的 = 字符表示光标当前所在的 - 字符。
| 步骤 | 命令 | 屏幕 | 剪贴板 |
|---|---|---|---|
= |
(空) | ||
Y |
- |
||
P |
=- |
||
Y |
-- |
||
P |
-=-- |
||
h |
=--- |
||
P |
-=---- |
||
Y |
----- |
||
P |
-----=----- |
||
---------=------ |
|||
-------------=------- |
限制条件
子任务
如果只输出了正确的命令数,却没有输出命令序列示例,或者输出的示例不正确,则只能获得该子任务一半的分数。
- 子任务 ( 分):
- 子任务 ( 分):
- 子任务 ( 分):
- 子任务 ( 分):
- 子任务 ( 分):
- 子任务 ( 分):无额外限制。
翻译由 ChatGPT-5.6 完成