NOIP2014模擬 高階打字機

2022-05-16 12:25:13 字數 1366 閱讀 6695

早苗入手了最新的高階打字機。最**自然有著與以往不同的功能,那就是它具備撤銷功能,厲害吧。

請為這種高階打字機設計乙個程式,支援如下3種操作:

t x:在文章末尾打下乙個小寫字母x。(type操作)

u x:撤銷最後的x次修改操作。(undo操作)(注意query操作並不算修改操作)

q x:詢問當前文章中第x個字母並輸出。(query操作)文章一開始可以視為空串。

第1行:乙個整數n,表示運算元量。

以下n行,每行乙個命令。保證輸入的命令合法。

每行輸出乙個字母,表示query操作的答案。

對於40%的資料 n<=200;

對於100%的資料 n<=100000;保證undo操作不會撤銷undo操作。

《高階挑戰》

對於200%的資料 n<=100000;undo操作可以撤銷undo操作。

其實ioi挑戰那部分對限制也沒啥幫助。。。看這資料點,幸好他不卡資料。

我們可以設個[1..20000]的滾動陣列(this is why i said that just now)l[i]表示第i個狀態時的字串。撤回操作只用將狀態設回前面就夠了。

上面那題目都是瞎搞,你自己點開我職業看看我才中學生好伐。。。

為甚只用20000?

資料不想卡死你。

為什麼你能過?

因為我長得帥。

能發原始碼嗎?

哎呀,你想得太天真啦!我是那種讓你們一點思考空間都沒有直接複製的人嗎?我像嗎?

var

n,i,p,g,m:longint;

l:array[0..20000]of ansistring;

s,x:char;

begin

readln(n);

for i:=1

to n do

begin

read(s);

read(x);

if (s='t') then

begin

readln(x);

g:=p mod

20000+1;

l[g]:=l[p]+x;

p:=g;

end;

if (s='u') then

begin

readln(m);

p:=p mod

20000+1;

l[p]:=l[(p-m+19999)mod

20000];

end;

if (s='q') then

begin

readln(m);

writeln(l[p,m]);

end;

end;

end.

高階打字機

早苗入手了最新的高階打字機。最 自然有著與以往不同的功能,那就是它具備撤銷功能,厲害吧。請為這種高階打字機設計乙個程式,支援如下3種操作 t x 在文章末尾打下乙個小寫字母x。type操作 u x 撤銷最後的x次修改操作。undo操作 注意query操作並不算修改操作 q x 詢問當前文章中第x個字...

高階打字機

題目描述 請為一種高階打字機設計乙個程式,支援如下3種操作 2.u x 撤銷最後的x次修改操作。undo操作 注意query操作並不算修改操作 文章一開始可以視為空串。輸入描述 第1行 乙個整數n,表示運算元量。以下n行,每行乙個命令。保證輸入的命令合法。輸出描述 每行輸出乙個字母,表示query操...

高階打字機

題目描述 早苗入手了最新的高階打字機。最 自然有著與以往不同的功能,那就是它具備撤銷功能,厲害吧。請為這種高階打字機設計乙個程式,支援如下3種操作 1.t x 在文章末尾打下乙個小寫字母x。type操作 2.u x 撤銷最後的x次修改操作。undo操作 注意query操作並不算修改操作 3.q x ...