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 ...