單調佇列 恐怖的奴隸主

2021-10-09 18:28:44 字數 1562 閱讀 2000

description

在《爐石傳說》這款遊戲中,有一張隨從卡牌叫做「恐怖的奴隸主」。這張卡牌的描述是這樣的:每當該隨從受到傷害且沒有死亡,召喚另乙個恐怖的奴隸主。還有一張卡牌叫做「旋風斬」,描述是「對所有隨從造成1點傷害」。使用「旋風斬」後,生命值變為0的「恐怖的奴隸主」並不會立即死亡,而會先結算召喚新的「恐怖的奴隸主」再結算生命值為0的「恐怖的奴隸主」的死亡。當然,使用旋風斬後,生命值變為0的「恐怖的奴隸主」不會召喚新的「恐怖的奴隸主」。隨從的數量是有上限的,在召喚乙個隨從前如果隨從數量已經達到上限則不會召喚。現在,如果隨從數量上限為k,最開始只有乙個生命值為m的「恐怖的奴隸主」,而且新召喚出來的「恐怖的奴隸主」的生命值也是m,那麼使用了n張「旋風斬」後還有多少個「恐怖的奴隸主」呢?

input

輸入共一行包含3個正整數n, m, k。

output

輸出共一行包含1個整數,表示使用n張旋風斬後「恐怖的奴隸主」的數量。

sample input

4 3 7

sample output

6【樣例說明】

初始有1個生命值為3的「恐怖的奴隸主」。

第1次旋風斬後,召喚了1個「恐怖的奴隸主」,剩餘1個生命值為2的和1個生命值為3的。

第2次旋風斬後,召喚了2個「恐怖的奴隸主」,剩餘1個生命值為1的、1個生命值為2的和2個生命值為3的。

第3次旋風斬後,召喚了3個「恐怖的奴隸主」,然後1個生命值為0的死亡,剩餘1個生命值為1的、2個生命值為2的和3個生命值為3的。

第4次旋風斬後,試圖召喚5個「恐怖的奴隸主」,但隨從數量達到上限7,所以只召喚了1個,然後其中1個生命值為0的死亡,最後剩餘2個生命值為1的、3個生命值為2的和1個生命值為3的,共6個。

data constraint

對於10%的資料,n,k<=10^3;

另有15%的資料,n,m<=10^5;

另有25%的資料,m<=10^5;

另有20%的資料,108<=n,m,k<=109;

對於全部資料,n,m,k<=10^15。

使用乙個佇列,記錄每種數有多少個,初始時有 1 個 1 和 m - 1 個 0,每次操作 o(1)更新。

注意到佇列中大部分(連續的一段)是 0,所以可以將它們合併、用某種方式表示,例如如果有連續 x 個 0 就在佇列中存-x。這樣有時候可以 o(1)地操作 x 次。可以證明,佇列中有至少 m - o(log k)個連續的 0。

#include

#include

using

namespace std;

#define ll long long

const

int maxn=

1077

;ll n,m,k,pos,s[maxn]

,f[maxn]

;int

main()

f[0]=s[0]

=1;for

(int i=

1; i<=n; i++)}

if(!pos)

printf

("%lld"

,s[n]);

else

}

恐怖的奴隸主 bob

試題3 恐怖的奴隸主 bob 源 bob.cpp 輸入檔案 bob.in 輸出檔案 bob.out 時間限制 1s 空間限制 512mb 小l熱衷於undercards.在undercards中,有四個格仔。每個格仔要麼是空的,要麼住著乙隻bigbob。每個bigbob有乙個不超過k的血量 血量減到...

規律 JZOJ 4222 恐怖的奴隸主

description 在 爐石傳說 這款遊戲中,有一張隨從卡牌叫做 恐怖的奴隸主 這張卡牌的描述是這樣的 每當該隨從受到傷害且沒有死亡,召喚另乙個恐怖的奴隸主。還有一張卡牌叫做 旋風斬 描述是 對所有隨從造成1點傷害 使用 旋風斬 後,生命值變為0的 恐怖的奴隸主 並不會立即死亡,而會先結算召喚新...

SSLOJ 恐怖的奴隸主 模擬 記憶化搜尋

小l熱衷於undercards.在undercards中,有四個格仔。每個格仔要麼是空的,要麼住著乙隻bigbob。每個bigbob有乙個不超過k的血量 血量減到0視為死亡。那個格仔隨即空 出。當乙隻bigbob受到傷害後,假如它沒有死亡且剩餘血量為t,它會從左數第 乙個空格處召喚乙隻血量為a t ...