#P6166. [IOI 2012] scrivener
[IOI 2012] scrivener
题目描述
有些人说李奥纳多是一个对于 Johannes Gutenberg 的崇拜者,Johannes 是一个发明活字印刷的德国铁匠,为了表达尊敬,李奥纳多设计了一台机器被称为小龙虾代书,那是一个非常简单的打字设备。这机器就像一部简单的现代打字机,但只能接受两个指令。一个指令是 输出一个字符,另一个指令是取消最近的指令。小龙虾代书的最大特点就是拥有这个功能强大的取消指令。因为一个取消指令本身也是一个指令,所以也可以被取消。
说明
你的任务是作出此小龙虾代书的程序,一开始并无输出任何文字,然后开始接受使用者输入的一连串指令,并可查询目前输出文字中的特定位置的字符。详细说明如下:
-
TypeLetter(L)
—附加一个小写字母L在输出文字的最后, 可以是 。 -
UndoCommands(U)
— 取消之前的 个指令, 是一个正整数。 -
GetLetter(P)
— 回传在输出文字中位置为 的字符, 是一个非负整数。 输出文字中的第一个字符的位置为 。 (这个查询并不是一个指令,因此会被取消指令忽略。)
三种操作可以依照任何顺序被呼叫 次或多次以上。
指令 UndoCommands(U)
会依照原本执行的相反顺序来取消前面 个指令: 如果被取消的指令是 TypeLetter(L)
,就会从输出文字最后面移除字母 。如果被取消的指令是 UndoCommands(X)
,那么将会依照原本执行的顺序重新执行之前被取消的 个指令。
范例
我们列出一连串可能的指令,以及每次执行指令后的输出文字。
操作 | 回传 | 输出文字 |
---|---|---|
TypeLetter(a) |
a |
|
TypeLetter(b) |
ab |
|
GetLetter(1) |
b |
|
TypeLetter(d) |
abd |
|
UndoCommands(2) |
a |
|
UndoCommands(1) |
abd |
|
GetLetter(2) |
d |
|
TypeLetter(e) |
abde |
|
UndoCommands(1) |
abd |
|
UndoCommands(5) |
ab |
|
TypeLetter(c) |
abc |
|
GetLetter(2) |
c |
|
UndoCommands(2) |
abd |
|
GetLetter(2) |
d |
输入格式
-
第 行,一个正整数 ,表示操作的个数。
-
第 到 行,每行开始有一个大写字母参数。
-
T
表示一个TypeLetter
指令,后面接着一个空白和一个小写字母参数。 -
U
表示一个UndoCommands
指令,后面接着一个空白和一个整数参数。 -
P
表示一个GetLetter
指令,后面接着一个空白和一个整数参数。
输出格式
对于每项 GetLetter
操作,输出一行,一个回传的字符。
提示
对于 的数据,。参数 保证不会超过前面已经输入的指令数目,而且参数 一定小于输出文字的长度(也就是输出文字的字母数)。