打字機
本題看起來很不好做,但仔細畫畫圖找找規律之後還是能找出規律的
——————————————————————————————————————————————
現在已知以s[i
]s[i]
s[i]
結尾的答案sum
[i
]sum[i]
sum[i]
和總答案,
這時候乙個準備加進答案的dot
h[j]
doth[j]
doth[j
]那麼我們發現,總答案的兩倍減去sum
[i
]sum[i]
sum[i]
證明:原來的答案中有以dot
h[j]
結尾的,
也有不以
doth
[j]結
尾的,因
為每個字
母都有可
能沒打到
,則有s
um[d
oth[
j]]個
不以do
th[j
]結尾的
,即do
th[j
]沒打到
。而這時
候在所有
的方案後
加上do
th[i
],因為
有可能打
到,也有
可能沒打
到,所以
乘2,而
又因為s
um[d
oth[
j]]個
答案已算
過,所以
應減
去doth[j]結尾的,也有不以doth[j]結尾的,因為每個字母都有可能沒打到,則有sum[doth[j]]個不以doth[j]結尾的,即doth[j]沒打到。而這時候在所有的方案後加上doth[i],因為有可能打到,也有可能沒打到,所以乘2,而又因為sum[doth[j]]個答案已算過,所以應減去
doth[j
]結尾的
,也有不
以dot
h[j]
結尾的,
因為每個
字母都有
可能沒打
到,則有
sum[
doth
[j]]
個不以d
oth[
j]結尾
的,即d
oth[
j]沒打
到。而這
時候在所
有的方案
後加上d
oth[
i],因
為有可能
打到,也
有可能沒
打到,所
以乘2,
而又因為
sum[
doth
[j]]
個答案已
算過,所
以應減去
遇到退格,
if
(cnt)
因為在doth中加字母實際上就是沒達到字母的方案,已經算過,所以不用管,而原陣列中的s[i]是沒算過的,所以要加1,而因為退格會對後面貢獻新的方案,所以sum要+1
#include
using
namespace std;
const
int n=
5000010
,mod=
0x125e591
;char s[n]
,doth[n]
;int n,m,sum[n]
;int
main()
else}}
printf
("%lld"
,ans)
;}
高階打字機
早苗入手了最新的高階打字機。最 自然有著與以往不同的功能,那就是它具備撤銷功能,厲害吧。請為這種高階打字機設計乙個程式,支援如下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 ...