#loj5772. 「CEOI2026」Vim
「CEOI2026」Vim
#5772. 「CEOI2026」Vim
标签: 传统 | 时间限制: 1000 ms | 内存限制: 256 MiB |
题目描述
很难找到比老牌编辑器 Vim 更极客的东西了——在这个编辑器里,我们可以做到“常规”编辑器中只能做梦不敢想的操作。当然,前提是我们愿意投入一周的学习和一个月的练习,让它那些不同寻常却极具威力的命令成为我们的“肌肉记忆”。就像在其他编辑器中一样,Vim 中也有一个光标,它始终位于某个字符上。初始时,光标位于文本的第一个字符上;也与其他编辑器类似,Vim 中有一个剪贴板,用于存储(以及间接地复制和移动)文本块。剪贴板初始为空。
在本题中,我们假设编辑器初始时恰好只有一个字符 -(减号),我们的目标是最终获得恰好 个连续的减号。我们将使用以下四个命令来帮助实现目标:
h:若光标位于第一个字符上,则该命令什么也不做;否则,它将光标向左移动一个字符。l:若光标位于最后一个字符上,则该命令什么也不做;否则,它将光标向右移动一个字符。Y:将从光标所在位置延伸至文本末尾的字符序列复制到剪贴板中,“覆盖”剪贴板中先前的任何内容。(若光标位于文本的第一个字符上,则整个文本将被复制到剪贴板中。)P:将存储在剪贴板中的文本副本插入到光标所在字符的前面,并将光标移动到最后插入的那个字符上。剪贴板的内容保持不变。若剪贴板为空,则什么也不会发生。
请编写一个程序,读取数字 ,并输出在上述条件下使用 Vim 获得恰好 个连续 - 字符所需的最少命令次数。程序还应当输出一个具有最少命令次数的命令序列样例。
输入格式
第一行包含测试用例的数量 。接下来 行,每行包含一个测试用例,即目标字符串的长度 。
输出格式
对于每个测试用例,各占一行输出所需的最少命令次数以及这样一个命令序列的样例,两者用空格分隔。
样例
输入
2
21
2
输出
10 YPYPhPYPPP
2 YP
正如我们在下表中所看到的,在第一个测试用例中,命令序列 YPYPhPYPPP 输出了正确的结果。屏幕一列中的字符 = 代表光标当前所在的 - 字符。
| 步骤 | 命令 | 屏幕状态 | 剪贴板内容 |
|---|---|---|---|
| — | = |
(空) | |
Y |
= |
- |
|
P |
=- |
||
Y |
=- |
-- |
|
P |
-=-- |
||
h |
=--- |
||
P |
-=---- |
||
Y |
-=---- |
----- |
|
P |
----------- |
||
P |
---------------- |
||
P |
--------------------- |
数据范围与提示
对于所有输入数据,满足:
详细子任务附加限制及分值如下表所示。
| 子任务 | 分值 | 附加限制 |
|---|---|---|
| 无附加限制 |