《爐石傳說:魔獸英雄傳》(hearthstone: heroes of warcraft,簡稱爐石傳說)是暴雪娛樂開發的一款集換式卡牌遊戲。遊戲在乙個戰鬥棋盤上進行,由兩名玩家輪流進行操作,本題所使用的爐石傳說遊戲的簡化規則如下:
\quad
* 玩家會控制一些角色,每個角色有自己的生命值和攻擊力。當生命值小於等於 0 時,該角色死亡。角色分為英雄和隨從。
\quad
* 玩家各控制乙個英雄,遊戲開始時,英雄的生命值為 30,攻擊力為 0。當英雄死亡時,遊戲結束,英雄未死亡的一方獲勝。
\quad
* 玩家可在遊戲過程中召喚隨從。棋盤上每方都有 7 個可用於放置隨從的空位,從左到右一字排開,被稱為戰場。當隨從死亡時,它將被從戰場上移除。
\quad
* 遊戲開始後,兩位玩家輪流進行操作,每個玩家的連續一組操作稱為乙個回合。
\quad
* 每個回合中,當前玩家可進行零個或者多個以下操作:
1) 召喚隨從:玩家召喚乙個隨從進入戰場,隨從具有指定的生命值和攻擊力。
2) 隨從攻擊:玩家控制自己的某個隨從攻擊對手的英雄或者某個隨從。
3) 結束回合:玩家宣告自己的當前回合結束,遊戲將進入對手的回合。該操作一定是乙個回合的最後乙個操作。
\quad
* 當隨從攻擊時,攻擊方和被攻擊方會同時對彼此造成等同於自己攻擊力的傷害。受到傷害的角色的生命值將會減少,數值等同於受到的傷害。例如,隨從 x 的生命值為 hx、攻擊力為 ax,隨從 y 的生命值為 hy、攻擊力為 ay,如果隨從 x 攻擊隨從 y,則攻擊發生後隨從 x 的生命值變為 hx - ay,隨從 y 的生命值變為 hy - ax。攻擊發生後,角色的生命值可以為負數。
本題將給出乙個遊戲的過程,要求編寫程式模擬該遊戲過程並輸出最後的局面。
樣例輸入:
8
summon 136
summon 242
endsummon 145
summon 121
attack 1
2end
attack 1
1
樣例輸出:
0301
23012
對於這個題,一共兩個玩家,輪流進行攻擊,可以用乙個int值進行遞增並且對2求餘的方式來表示當前是哪個玩家在進行操作。當玩家進行操作時,共有三種操作,召喚隨從,在某個位置放置隨從時,要把該位置以及後面的隨從向後平移一位,當乙個隨從死亡時,將其後面的隨從向前進行移位。第二個是攻擊,攻擊有兩種情況,乙個是攻擊英雄,英雄的血量減少某個隨從的攻擊力,如果血量小於等於0,則該英雄死亡, 遊戲結束,否則繼續戰鬥。如果攻擊隨從,兩方都會造成傷害,具體規則題目描述中提到過,如果是結束操作,則換另一方進行操作,然後根據題目要求進行輸出。
#include
#include
using
namespace std;
struct sumo
sumo&
operator
=(sumo s)};
struct player };
player p[5]
;int n;
intmain()
else
if(oper ==
"attack"
)else
if(p[oppo]
.summ[de]
.blood <=0)
}}else
if(oper ==
"end")}
if(p[0]
.blood >
0&& p[1]
.blood >0)
//按題目要求進行輸出
cout <<
"0"<< endl;
else
if(p[0]
.blood <=0)
cout <<
"-1"
<< endl;
else
if(p[1]
.blood <=0)
cout <<
"1"<< endl;
cout << p[0]
.blood << endl;
int num1, num2;
num1 =
0, num2 =0;
int bb1[7]
, bb2[7]
;for
(int i =
1; i <=
7; i++)if
(p[1
].summ[i]
.blood >0)
} cout << num1 <<
" ";
for(
int i =
0; i < num1; i++
) cout << bb1[i]
<<
" ";
cout << endl;
cout << p[1]
.blood << endl;
cout << num2 <<
" ";
for(
int i =
0; i < num2; i++
) cout << bb2[i]
<<
" ";
cout << endl;
return0;
}
csp16年9月爐石傳說
爐石傳說 魔獸英雄傳 hearthstone heroes of warcraft,簡稱爐石傳說 是暴雪娛樂開發的一款集換式卡牌遊戲 如下圖所示 遊戲在乙個戰鬥棋盤上進行,由兩名玩家輪流進行操作,本題所使用的爐石傳說遊戲的簡化規則如下 玩家會控制一些角色,每個角色有自己的生命值和攻擊力。當生命值小於...
csp模擬 模擬測試16
fdasds include using namespace std define cle a memset a,0,sizeof a inline int read const int mod 1e9 7,maxn 1e3 100 int n,m,ans 0 int f maxn maxn int...
CSP 2023年9月 買菜
我的csp 倉庫 由於時間都是正數而且資料規模並不大,所以可以使用陣列表示時間線,所以只需要建立兩個人的時間線陣列,將所有裝車時間區間置為1,其他為0 最後只需要一遍遍歷,兩個都為1的,就是在聊天的時間了 include include include define local using name...