#loj5772. 「CEOI2026」Vim

「CEOI2026」Vim

#5772. 「CEOI2026」Vim

标签: 传统 | 时间限制: 1000 ms | 内存限制: 256 MiB |

题目描述

题目译自 CEOI 2026 Day2 T3「Vim

很难找到比老牌编辑器 Vim 更极客的东西了——在这个编辑器里,我们可以做到“常规”编辑器中只能做梦不敢想的操作。当然,前提是我们愿意投入一周的学习和一个月的练习,让它那些不同寻常却极具威力的命令成为我们的“肌肉记忆”。就像在其他编辑器中一样,Vim 中也有一个光标,它始终位于某个字符上。初始时,光标位于文本的第一个字符上;也与其他编辑器类似,Vim 中有一个剪贴板,用于存储(以及间接地复制和移动)文本块。剪贴板初始为空。

在本题中,我们假设编辑器初始时恰好只有一个字符 -(减号),我们的目标是最终获得恰好 nn 个连续的减号。我们将使用以下四个命令来帮助实现目标:

  • h:若光标位于第一个字符上,则该命令什么也不做;否则,它将光标向左移动一个字符。
  • l:若光标位于最后一个字符上,则该命令什么也不做;否则,它将光标向右移动一个字符。
  • Y:将从光标所在位置延伸至文本末尾的字符序列复制到剪贴板中,“覆盖”剪贴板中先前的任何内容。(若光标位于文本的第一个字符上,则整个文本将被复制到剪贴板中。)
  • P:将存储在剪贴板中的文本副本插入到光标所在字符的前面,并将光标移动到最后插入的那个字符上。剪贴板的内容保持不变。若剪贴板为空,则什么也不会发生。

请编写一个程序,读取数字 nn,并输出在上述条件下使用 Vim 获得恰好 nn 个连续 - 字符所需的最少命令次数。程序还应当输出一个具有最少命令次数的命令序列样例。

输入格式

第一行包含测试用例的数量 tt。接下来 tt 行,每行包含一个测试用例,即目标字符串的长度 nn

输出格式

对于每个测试用例,各占一行输出所需的最少命令次数以及这样一个命令序列的样例,两者用空格分隔。

样例

输入

2
21
2

输出

10 YPYPhPYPPP
2 YP

正如我们在下表中所看到的,在第一个测试用例中,命令序列 YPYPhPYPPP 输出了正确的结果。屏幕一列中的字符 = 代表光标当前所在的 - 字符。

步骤 命令 屏幕状态 剪贴板内容
00 = (空)
11 Y = -
22 P =-
33 Y =- --
44 P -=--
55 h =---
66 P -=----
77 Y -=---- -----
88 P -----------
99 P ----------------
1010 P ---------------------

数据范围与提示

对于所有输入数据,满足:

  • 1t1001 \leq t \leq 100
  • 1n1071 \leq n \leq 10^7

详细子任务附加限制及分值如下表所示。

子任务 分值 附加限制
11 2020 n100n \leq 100
22 88 n1000n \leq 1000
33 1818 n104n \leq 10^4
44 1818 n105n \leq 10^5
55 1818 n106n \leq 10^6
66 1818 无附加限制