#P4567. [AHOI2006] 文本编辑器

[AHOI2006] 文本编辑器

题目描述

这些日子,可可不和卡卡一起玩了,原来可可正废寝忘食的想做一个简单而高效的文本编辑器。你能帮助他吗?为了明确任务目标,可可对“文本编辑器”做了一个抽象的定义:

  • Move k:将光标移动到第 kk 个字符之后,如果 k=0k=0,将光标移到文本第一个字符之前。
  • Insert n (换行) S:在光标后插入长度为 nn 的字符串 SS,光标位置不变,n1n \ge 1
  • Delete n:删除光标后的 nn 个字符,光标位置不变,n1n \ge 1
  • Rotate n:反转光标后的 nn 个字符,光标位置不变,n1n \ge 1
  • Get:输出光标后的一个字符,光标位置不变。
  • Prev:光标前移一个字符。
  • Next:光标后移一个字符。

下面是几个定义:

  • 文本:由 00 个或多个字符构成的序列。这些字符的 ASCII 码在闭区间 [32,126][32, 126] 内,也就是说,这些字符均为可见字符或空格。
  • 光标:在一段文本中用于指示位置的标记,可以位于文本的第一个字符之前,文本的最后一个字符之后或文本的某两个相邻字符之间。
  • 文本编辑器:为一个可以对一段文本和该文本中的一个光标进行如下七条操作的程序。如果这段文本为空,我们就说这个文本编辑器是空的。

编写一个程序:

  1. 建立一个空的文本编辑器。
  2. 从输入文件中读入一些操作指令并执行。
  3. 对所有执行过的 GET 操作,将指定的内容写入输出文件。

输入格式

输入文件中第一行是指令条数 NN,以下是需要执行的 NN 个操作。除了回车符之外,输入文件的所有字符的 ASCII 码都在闭区间 [32,126][32, 126] 内。且行尾没有空格。

输出格式

依次对应输入文件中每条 GET 指令的输出,不得有任何多余的字符。

10
Insert 13
Balanced eert
Move 2
Delete 5
Next
Insert 7
 editor
Move 0
Get
Move 11
Rotate 4
Get
B
t

提示

对输入数据我们有如下假定:

  1. MOVE 操作不超过 5×1045\times 10^4 个,INSERT, DELETEROTATE 操作作的总个数不超过 6×1036\times 10^3GET 操作不超过 2×1042\times 10^4 个,PREVNEXT 操作的总个数不超过 2×1042\times 10^4
  2. 所有 INSERT 插入的字符数之和不超过 2M2M1M=2201M=2^{20})。
  3. DELETE 操作、ROTATE 操作和 GET 操作执行时光标后必然有足够的字符。MOVEPREVNEXT 操作不会把光标移动到非法位置。
  4. 输入文件没有错误。