#P17168. [CEOI 2026] Vim

    ID: 19500 远端评测题 1000ms 256MiB 尝试: 0 已通过: 0 显示难度NOI/NOI+/CTS 上传者: 标签>Special JudgeCEOI(中欧)2026

[CEOI 2026] Vim

题目描述

恐怕很难找到比老派的 Vim 更加极客的东西了。在这个编辑器中,我们能做到许多在“普通”编辑器里只能想象的事情——当然,前提是愿意投入一周时间学习,再花一个月练习,让那些不同寻常但功能强大的命令成为我们的“肌肉记忆”。和其他编辑器一样,Vim 中也有一个光标,它始终位于某个字符上。初始时,光标位于文本的第一个字符上。Vim 中同样还有一个剪贴板,用于存储文本片段,并间接用于复制和移动文本。剪贴板初始为空。

本题假定编辑器最初恰好有一个 -(减号)字符,目标是最终得到恰好 nn 个连续的减号。我们将使用以下 44 条命令来实现这一目标:

  • h:如果光标位于第一个字符上,则该命令不执行任何操作;否则,光标向左移动一个字符。
  • l:如果光标位于最后一个字符上,则该命令不执行任何操作;否则,光标向右移动一个字符。
  • Y:将从光标所在位置开始、一直延伸到文本末尾的字符序列复制到剪贴板,并“覆盖”剪贴板先前的所有内容。(如果光标位于文本的第一个字符上,则整段文本都会被复制到剪贴板。)
  • P:将剪贴板中存储的文本复制一份,插入到光标当前所在字符之前,并将光标移动到最后一个新插入的字符上。剪贴板内容不会改变。如果剪贴板为空,则不执行任何操作。

编写一个程序,读入 nn,输出在上述条件下使 Vim 中最终恰好出现 nn 个连续 - 字符所需的最少命令数。程序还应输出一个达到最少命令数的命令序列示例。

输入格式

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

输出格式

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

2
21
2
10 YPYPhPYPPP
2 YP

提示

样例解释

如下表所示,在第一个测试用例中,命令序列 YPYPhPYPPP 可以得到正确结果。屏幕(Screen)列中的 = 字符表示光标当前所在的 - 字符。

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

限制条件

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

子任务

如果只输出了正确的命令数,却没有输出命令序列示例,或者输出的示例不正确,则只能获得该子任务一半的分数。

  • 子任务 112020 分):n100n\le 100
  • 子任务 2288 分):n1000n\le 1000
  • 子任务 331818 分):n104n\le 10^4
  • 子任务 441818 分):n105n\le 10^5
  • 子任务 551818 分):n106n\le 10^6
  • 子任务 661818 分):无额外限制。

翻译由 ChatGPT-5.6 完成