“疲劳”传说 (legend.pas/c/cpp)

时间:2023-01-01 04:01:34

【题目描述】

炉石传说:魔兽英雄传是一款由暴雪开发的非常流行的游戏。这个问题建立在这个游戏的基础上,但是即使你不知道这个游戏,你也能非常轻松的解决这个问题。

每一局游戏是两个对手1v1的比赛。炉石传说的游戏方式是回合制,每个玩家轮流打出自己手中的牌。

每个玩家可以选择一个“英雄”,一个魔兽争霸中的重要人物。每个英雄有它独特的英雄技能。每个英雄有30滴血,并且如果他的血量减少到0 以下(包括0),英雄就会死亡、控制他的玩家就输掉了游戏。

在回合开始,玩家从他们的牌库中抽一张卡——牌库由玩家在游戏前挑选好的30张牌组成。在回合中,玩家可以选择使用卡牌或是使用英雄技能。然而,他们的行动将会消耗法力水晶,这个限制促使玩家策略性地规划他们的行动。每个玩家由1个法力水晶开局,在他们每个回合的开始都会多获得一个新的空法力水晶直到达到10个法力水晶的上限,并且将回复所有法力水晶。

然而,一旦一个玩家抽光了他的牌库,从空牌库中抽卡会导致他们受到“疲劳”的伤害。“疲劳”在刚开始对玩家造成1点伤害,但是每次伤害都会加1。

现在,考虑这样一种情况:玩家手中的卡已经用完,当然,两个玩家都有10个法力水晶。

那意味着,每回合,每个玩家只有两个操作:

(1)  从空牌库中抽卡

(2)  使用他们的英雄技能(英雄技能消耗两个法力水晶并且每回合只能使用一次)

定义n为英雄的血量,n不超过30。

定义m为英雄的护甲,只有当英雄的护甲降为0时才会减少英雄的血量。英雄护甲没有上限。

为了简化问题,我们给出四个英雄可供选择:

1 吉安娜   火焰冲击   对任意目标造成一点伤害

2 雷克萨   稳固射击   对敌方英雄造成两点伤害

3 加尔鲁什 全副武装   提升两点护甲

4 安度因   次级治疗术 回复两滴血

给你两个玩家的英雄编号,英雄血量,英雄护甲,请问第一个玩家能获胜吗?(假设两人还未受到“疲劳”伤害)

注意:英雄的血量不能超过其上限30。

【输入格式】

第一行包括整数T表示包含T组数据。

对于每组数据:第一行包括三个整数X1,N1,M1,代表第一个玩家的英雄编号,英雄血量与英雄护甲。

第二行包括三个整数X2,N2,M2代表第二个玩家的英雄编号,英雄血量与英雄护甲。

【输出格式】

对于每组数据,如果第一个玩家能获胜,输出“YES”,否则输出“NO”

 

 

【样例】

Sample Input

Sample Output

2

1 10 3

2 5 10

3 10 10

4 10 10

NO

NO

【数据范围与约定】

对于50%的数据,X1,X2<=2

对于100%的数据,T<=100,保证输入数据合法且运算过程中所有数不超过32位整数



题解

legend

模拟题。注意血量有上限,而护甲无上限。在每组数据计算之前要赋初值。在回合中先计算疲劳伤害玩家才能行动,如果血量已经降到0以下直接死亡,不能再使用英雄技能。