[NOI2003]Editor
很久以前,使用 DOS 的程序员们开始厌倦 EDLIN,于是纷纷改用自己编写的文本编辑器。
多年后,小明偶然找到了当时的一款文本编辑软件。经过一些简单的测试,他惊奇地发现,这款软件每秒能够完成上万次编辑操作。于是,小明决定实现一个同样高效的文本编辑器,希望你能帮助他完成这个任务。
本题中的文本编辑器定义如下:
- 文本:由零个或多个 ASCII 码位于闭区间 内的字符组成的序列;
- 光标:文本中用于指示位置的标记,可以位于文本开头、文本末尾或任意两个相邻字符之间;
- 文本编辑器:由一段文本和该文本中的一个光标组成,并支持下列操作。若文本为空,则称该文本编辑器为空。
支持的操作如下:
| 操作 | 输入格式 | 功能 |
|---|---|---|
Move k | 将光标移动到第 个字符之后。若 ,则将光标移动到文本开头。 | |
Insert n,随后输入字符串 | 在光标处插入长度为 的字符串 ,光标位置不变,其中 。 | |
Delete n | 删除光标后的 个字符,光标位置不变,其中 。 | |
Get n | 输出光标后的 个字符,光标位置不变,其中 。 | |
Prev | 将光标向前移动一个字符。 | |
Next | 将光标向后移动一个字符。 |
初始时,文本编辑器为空。你需要依次执行给定的所有操作,并输出每次 操作取得的内容。
输入格式
第一行包含一个整数 ,表示需要执行的操作数。
接下来输入 个操作,格式如题目描述所示。
为了便于阅读,Insert 操作所插入的字符串中可能包含换行符。读取字符串时应忽略这些换行符,直到读入 个非换行字符为止。除换行符外,输入中的所有字符的 ASCII 码均位于闭区间 内,并且行尾没有空格。
输出格式
对于每个 Get 操作,输出一行,内容为该操作取得的字符串。
样例输入
15
Insert 26
abcdefghijklmnop
qrstuv wxy
Move 15
Delete 11
Move 5
Insert 1
^
Next
Insert 1
_
Next
Next
Insert 4
.\/.
Get 4
Prev
Insert 1
^
Move 0
Get 22
样例输出
.\/.
abcde^_^f.\/.ghijklmno
数据范围
Move操作不超过 个;Insert和Delete操作的总数不超过 ;Prev和Next操作的总数不超过 ;- 所有
Insert操作插入的字符数之和不超过 ,其中 ; - 正确输出文件的长度不超过 字节;
- 执行
Delete和Get操作时,光标后必然有足够的字符; Move、Prev和Next操作不会将光标移动到非法位置;- 输入文件保证合法。
来源与许可
本题为 NOI 2003 试题「Editor」,题面与测试数据整理自 BZOJ。
样例 1
输入
15
Insert 26
abcdefghijklmnop
qrstuv wxy
Move 15
Delete 11
Move 5
Insert 1
^
Next
Insert 1
_
Next
Next
Insert 4
.\/.
Get 4
Prev
Insert 1
^
Move 0
Get 22
输出
.\/.
abcde^_^f.\/.ghijklmno