題目大意:
乙個計算機支援一下三中操作:
t'>t
t x
'>x
x:在文章末尾打下乙個小寫字母x
'>xx。
u'>u
u x
'>x
x:撤銷最後的x
'>x
x次修改操作。
q'>qq x
'>x
x:詢問當前文章中第x
'>x
x個字母並輸出。 in
put'>inp
utinput
7
t at b
t cq 2
u 2t c
q 2
out
put'>out
putoutput
b
c
思路:
ioi題目。。。
正解是主席樹(當然啦什麼tri
e'>tri
etrie
+倍增法尋祖,可持久化跳表,可持久化塊狀陣列無敵的東西都可以做)。
但是本蒟蒻是用滾動陣列水過了這道題。
本題有三個階段:
對於50
'>50
50%的資料 n
≤100000
'>n
≤100000
n≤100000
;保證u
'>u
u操作不會撤銷u
'>u
u操作.
對於100
'>100
100%的資料 n
≤100000
'>n
≤100000
n≤100000
;u'>u
u操作可以撤銷u
'>u
u操作。io
i'>ioi
ioi階段3
'>3
3就直接放棄了 畢竟我還不會主席樹。
那麼對於階段1
'>1
1,我們只要模擬堆,就可以很簡單地得到這部分分。
var
tail,n,i,j,x:longint;
c:array[1..100000] of char; //模擬堆
ch,orz:char;
begin
readln(n);
for i:=1
to n do
begin
read(ch,orz);
if ch='t'
then
//插入
begin
inc(tail);
readln(c[tail]); //放入堆頂
end;
if ch='q'
then
//詢問
begin
readln(x);
writeln(c[x]); //輸出第i位
end;
if ch='u'
then
//刪除
begin
readln(x);
dec(tail,x) //將最後x位輸出
end;
end;
end.
對於階段二,我們也要把它分為兩部分。
我們可以開乙個長度為100000
'>100000
100000的an
sist
ring
'>ans
istr
ingansistring
陣列s'>ss,s
[i]'>s[i
]s[i]
表示第i
'>i
i種情況。再開乙個sum
'>sum
sum,表示第幾種情況。這樣,當我們遇到u
'>u
u操作時,把前面x
'>x
x個操作還原,其實就是不做前x
'>x
x個操作,直接賦值為s[sum-x-1]。這樣可以得到90分。
s[sum]:=s[sum-1]+ch; //儲存情況
end;
if ch='q'
then
begin
readln(x);
writeln(s[sum][x]); //輸出現在的情況的第x位
end;
if ch='u'
then
begin
readln(x);
inc(sum); //也算一種情況
s[sum]:=s[sum-1-x]; //直接取第sum-1-x位
end;
end;
end.
但是這樣會mle,s
'>s
s陣列開的太大了。所以我們要用滾動陣列來優化。每次將sum
'>sum
sum%20000
'>20000
20000
就可以了。
**:
const
k=20000; //滾動陣列,其他與90分**一樣。
var sum,n,i,j,x:longint;
s:array[1..k] of ansistring;
ch,orz:char;
begin
readln(n);
for i:=1
to n do
begin
read(ch,orz);
if ch='t'
then
begin
readln(ch);
inc(sum);
s[sum mod k]:=s[(sum-1)mod k]+ch;
end;
if ch='q'
then
begin
readln(x);
writeln(s[sum mod k][x]);
end;
if ch='u'
then
begin
readln(x);
inc(sum);
s[sum mod k]:=s[(sum-1-x) mod k];
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 ...