#P16498. 我该如何帮忙?
我该如何帮忙?
题目背景
瓦夏的键盘坏了,现在他只能使用鼠标输入文字。
每次操作时,他可以从字符表中复制一个字母,或者复制已经输入文本中的某个连续片段,然后将复制的内容粘贴到当前文本的末尾。由于在文本中间插入内容很容易让人混乱,瓦夏只会在文本末尾进行粘贴。
请你为瓦夏制定一份准确的操作方案,使他能够用最少的复制粘贴操作输入给定文本。
题目描述
给定一个仅由小写英文字母组成的字符串 ,初始时已经输入的文本为空。
你可以执行以下两类操作:
-
letter从字符表中复制目标字符串中当前需要输入的下一个字母,并将它添加到已输入文本的末尾。
-
copy l r复制已经输入文本中从第 个字符开始、到第 个字符结束的连续片段,并将该片段添加到已输入文本的末尾。
字符位置从 开始编号。执行该操作时,被复制的整个片段必须已经存在于当前输入完成的文本中。
你需要输出一种操作次数最少的方案,使最终得到的文本恰好等于 。
若存在多种最优方案,输出任意一种即可。
输入格式
输入一行一个字符串 ,表示瓦夏需要输入的文本。
字符串仅由小写英文字母组成。
输出格式
第一行输出一个整数 ,表示最少操作次数。
接下来输出 行,每行描述一次操作,格式为以下两种之一:
lettercopy l r
对于 copy l r:
- 表示复制片段的第一个字符位置;
- 表示复制片段末尾后一位的位置;
- 实际复制的片段为 。
输出的操作按执行顺序排列。
样例
输入
abab
输出
3
letter
letter
copy 1 3
样例说明
可以按如下方式得到字符串 abab:
- 执行
letter,得到a; - 执行
letter,得到ab; - 执行
copy 1 3,复制已经输入的ab并添加到末尾,得到abab。
总共需要 次操作。
数据范围
说明
原题采用文件输入输出:kmp.in 与 kmp.out。本题已改为标准输入输出形式。
本题属于构造题。若用于允许输出任意最优方案的在线评测,需要使用特殊判题程序检查方案合法性及操作次数的最优性。