题目来源于山东省第七届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 }