趣味ACM题——圣骑士的斩杀

题目来源于山东省第七届ACM大学生程序设计竞赛(Execution of Paladin)

题目描述

  鱼人是炉石里的一支强大种族,在探险者协会里,圣骑士有了一张新牌,叫亡者归来,效果是召唤本轮游戏中7个已死鱼人。如果死掉的不足7个,那么召唤的数量就会不足7。

  鱼人有很多,下面的4个是:

  寒光智者(Coldlight Oracle):3费,2攻,2血,战吼:双方玩家各抽2张牌。

  鱼人领军(Murloc Warleader):3费,3攻,3血,其他鱼人获得+2/+1。

  蓝腮战士(Bluegill Warrior):2费,2攻,3血,冲锋。

  老瞎眼(Old Murk-Eye):4费,2攻,3血,冲锋。战场上每有1个其他鱼人就会使其获得+1攻击。

  说明:

  法力:召唤随从的消耗。技能效果召唤的随从不消耗额外法力,只会消耗卡牌本身法力,双方玩家最多有10点法力。

  攻击:随从每次能造成的伤害。

  战吼:拥有战吼效果的随从,在从手牌里打出时会触发这个效果。被技能召唤的随从不会触发战吼。

  冲锋:本来,在召唤出来的这一轮,随从是无法攻击的,但是有冲锋就可以。在召唤回合可以直接攻击。

  战场:战场(游戏盘),游戏各种内容发生的地方,每场游戏都发生在棋盘上。

  +2/+1:+2攻击和+1血量。

  现在,轮到你出牌了,你有10点法力,只剩一张亡者归来。战场上没有任何随从,意味着你的随从可以直接攻击对手英雄。你还记得你出过的鱼人,也知道对手英雄的血量,那你能够用手上唯一这张牌赢得胜利吗?

输入

多组测试方案,第1行包括 integer T(7<=22000);表示测试数量。

每个测试的第1行都包括2个integer,n(已死的鱼人,0<=n<=7),h(英雄血量,0<h<=30)

后续N行里,每行都包括string,表示已死鱼人名称,String只能为:“寒光智者”,“鱼人领军”,“蓝腮战士”,“老瞎眼”。

输出

列出所有方案后,如果能赢得游戏,那就输出"Mrghllghghllghg!"(没有引号),否则输出“Tell you a joke, the execution of Paladin.”使用随从攻击敌人英雄,使其血量少于等于0即可胜利。

样例

提示

第1个方案里,鱼人都无法攻击。

第2个方案里,每个老瞎眼都有+2攻击,因为另外的一个老瞎眼和寒光智者,因此总伤害为8。

最后一个方案里,老瞎眼有12攻击(2点基础攻击,6个其他随从;2个鱼人领军,2个蓝腮战士有6攻(2基础攻击,2个鱼人领军)因此总伤害是24)

 

 

思路

寒光智者:没用;
鱼人领军:给蓝腮战士和老瞎眼每只加2点攻击;
蓝腮战士:加2点攻击;
老瞎眼:加2点攻击,给除了自身其他所有的每只加一点攻击。

 

标准程序

 

 1 #include<bits/stdc++.h> 
 2 using namespace std;
 3 #define MAXN 100
 4 int main()
 5 {
 6     int t;
 7     cin>>t;
 8     while(t--)
 9     {
10         int i,num,hp,sum,n1,n2,n3,n;
11         sum=n1=n2=n3=n=0;
12         cin>>num>>hp;
13         char a[MAXN];
14         cin.getline(a,MAXN);
15         for(i=0;i<num;i++)
16         {
17             char a[MAXN];
18             cin.getline(a,MAXN);
19             if(a[0]=='M') 
20                 n2=n2+2;
21             else if(a[0]=='B')
22             {
23                 n1=n1+2;
24                 ++n;
25             }
26             else if(a[0]=='O')
27             {
28                 n1=n1+2;
29                 ++n3;
30                 ++n;
31             }
32         }
33         sum=n2*n+n1+n3*(num-1);
34         if(sum>=hp) 
35             cout<<"Mrghllghghllghg!"<<endl;
36         else 
37             cout<<"Tell you a joke, the execution of Paladin."<<endl;
38     }
39     return 0;
40 }

 

转载于:https://www.cnblogs.com/DestinHistoire/p/10256916.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值