試題3:恐怖的奴隸主(bob)
源**:bob.cpp
輸入檔案:bob.in
輸出檔案:bob.out
時間限制:1s
空間限制:512mb
小l熱衷於undercards.
在undercards中,有四個格仔。每個格仔要麼是空的,要麼住著乙隻bigbob。
每個bigbob有乙個不超過k的血量;血量減到0視為死亡。那個格仔隨即空
出。 當乙隻bigbob受到傷害後,假如它沒有死亡且剩餘血量為t,它會從左數第
乙個空格處召喚乙隻血量為a[t]的bigbob;若沒有空格,則不會召喚。
法術r定義為:從左往右,對每個bigbob造成一點傷害;假如有bigbob死
亡,重複上述效果。
聰明的小l發現,在某些情況下,當他發動法術r時,遊戲會陷入迴圈。
他想求出這樣的初始情形有多少種。
輸入乙個正整數k;
隨後一行k-1個正整數,表示a[1]~a[k-1];
輸出乙個整數,表示答案。
2 2
31 bigbob最多有2血,滿血bigbob受傷會召出新的。
迴圈的初始狀態有:
(2,1,0,0),(1,2,0,0),(2,0,1,0),(2,1,1,0),(0,2,1,0),(1,2,1,0),(2,2,1,0) ,(1,0,2,0),(0,1,2,0),(1,1,2,0),(2,1,2,0),(2,1,0,1),(0,2,0,1),(1,2,0,1),(0,2,1,1),(1,2,1,1),(0,0,2,1),(1,0,2,1),(0,1,2,1),(1,1,2,1),(2,1,2,1),(0,2,2,1),(1,2,2,1),(2,1,0,2) ,(1,2,0,2),(2,0,1,2),(2,1,1,2),(0,2,1,2),(1,2,1,2),(2,2,1,2),(2,1,2,2)
共31種。
對於30%的資料,k≤5;
對於70%的資料,k≤10, a[i]=k;
對於100%的資料,k≤15, 1≤a[i]≤k。
(這裡我不得不吐槽一下:這道題作者的語文老師應該是乙個教數學的體育老師吧)
這裡我解釋一下題目。(可能有很多人栽在了這裡,包括我……)
首先每次從左到右對每乙隻bigbob進行1血的攻擊。
攻擊過程中若乙隻bigbob沒死它會立即在從左到右的第乙個空地上「生」出乙個血量為a[t](t為bigbob的剩餘)的「新」bigbob。(若無空地,則不會有「新」bigbob)
攻擊過程中若乙隻bigbob死亡,則該bigbob的位置會變為空地。
若進行完一輪(一輪:從左到右對每乙隻bigbob進行1血的攻擊)攻擊後沒有任何乙隻bigbob死亡或全部變為空地,則迴圈結束。
因為這道題的資料量很小又為了保險起見,所以我們採用暴力(模擬)。(這裡我要感謝一下作者~)
大體思路是:先列舉每乙個迴圈的初始狀態(最多154種情況),再判斷是否迴圈。
#include#include#includeusing namespace std;long long k,s[40],t[11000],ans=0;
bool flag[16][16][16][16];//記錄已出現過的情況
inline void dfs(int x)
if(b==1) fflag=1;
b=max(b-1,0);
if(b)
if(c==1) fflag=1;
c=max(c-1,0);
if(c)
if(d==1) fflag=1;
d=max(d-1,0);
if(d)
if(a+b+c+d==0 || !fflag) return;//判單是否已結束
if(flag[a][b][c][d])//判斷是否出現過}}
for(int i=0;i<=k;i++)//列舉所有情況
}int main()
單調佇列 恐怖的奴隸主
description 在 爐石傳說 這款遊戲中,有一張隨從卡牌叫做 恐怖的奴隸主 這張卡牌的描述是這樣的 每當該隨從受到傷害且沒有死亡,召喚另乙個恐怖的奴隸主。還有一張卡牌叫做 旋風斬 描述是 對所有隨從造成1點傷害 使用 旋風斬 後,生命值變為0的 恐怖的奴隸主 並不會立即死亡,而會先結算召喚新...
規律 JZOJ 4222 恐怖的奴隸主
description 在 爐石傳說 這款遊戲中,有一張隨從卡牌叫做 恐怖的奴隸主 這張卡牌的描述是這樣的 每當該隨從受到傷害且沒有死亡,召喚另乙個恐怖的奴隸主。還有一張卡牌叫做 旋風斬 描述是 對所有隨從造成1點傷害 使用 旋風斬 後,生命值變為0的 恐怖的奴隸主 並不會立即死亡,而會先結算召喚新...
SSLOJ 恐怖的奴隸主 模擬 記憶化搜尋
小l熱衷於undercards.在undercards中,有四個格仔。每個格仔要麼是空的,要麼住著乙隻bigbob。每個bigbob有乙個不超過k的血量 血量減到0視為死亡。那個格仔隨即空 出。當乙隻bigbob受到傷害後,假如它沒有死亡且剩餘血量為t,它會從左數第 乙個空格處召喚乙隻血量為a t ...