luogu#P6166. [IOI2012] scrivener
[IOI2012] 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
操作,输出一行,一个回传的字符。
10
T c
T z
T u
T a
T i
T h
T f
T z
P 3
P 0
a
c
98
T u
T g
T p
T h
T w
P 3
P 0
T d
T d
T r
T v
T z
T w
T h
P 0
T d
T v
T b
P 9
T n
T e
P 0
T s
T i
T a
P 6
T b
T n
T m
T t
T m
T g
T y
T g
P 0
T m
P 18
T r
P 17
T w
T w
T o
T m
T m
P 0
T q
P 5
T t
P 27
P 34
T p
T f
T h
T j
T f
T l
P 3
T f
T q
T h
P 17
T w
T d
T p
T z
P 0
T m
P 10
T o
P 5
P 18
P 7
T q
T z
P 2
T u
P 10
T e
P 6
T s
T t
P 24
T s
P 0
T t
T c
P 4
T j
T o
P 5
T i
P 11
T a
T t
P 58
P 51
P 64
P 12
h
u
u
z
u
d
u
i
s
u
d
g
m
h
s
u
w
d
i
r
p
w
d
m
u
w
d
h
s
o
a
d
提示
对于 的数据,。参数 保证不会超过前面已经输入的指令数目,而且参数 一定小于输出文字的长度(也就是输出文字的字母数)。