BNU4204 动物PK

               
稀奇稀奇真稀奇,动物园摆出了擂台赛。小动物们纷纷上台比试,谁能获得最后的冠军呢?
动物园长发现小动物们打擂只与自身的三项属性有关:血量,攻击力和防御力。此外,小动物在赛前都为自己准备了一系列的攻击计划,计划按回合制定,包含攻击和格挡两种动作。计划的回合数是有限的,如果在完成计划中所有动作后,重复执行已经定下的计划。某小动物的血量等于或小于0时,该小动物退场,打擂结束。如果双方同时退场,那么为平局,否则未退场的一方胜。
在某回合进行前,小动物A的当前血量为HPA,攻击力为ATA,防御力为DFA;小动物B的当前血量为HPB,攻击力为ATB,防御力为DFB。那么,这个回合结束时,可能出现如下4种情况:
1、回合中小动物A执行攻击动作,小动物B执行格挡动作。回合结束后,小动物A的血量为min{HPA-(ATA-DFB), HPA},小动物B的血量为HPB-1;
2、回合中小动物A执行格挡动作,小动物B执行攻击动作。回合结束后,小动物A的血量为HPA-1,小动物B的血量为min{HPB-(ATB-DFA), HPB};
3、回合中小动物A与B同时执行攻击动作。回合结束后,小动物A的血量为min{HPA-(ATB-DFA), HPA},小动物B的血量为min{HPB-(ATA-DFB), HPB};
4、回合中小动物A与B同时执行格挡动作。回合结束后,小动物A的血量为HPA,小动物B的血量为HPB。
 
如,小猴与小猫进行比赛,属性如下:
 小猴小猫
血量510
攻击力53
防御力53
 
 
小猴的攻击序列为:1、攻击,2、格挡,3、攻击,4、格挡
小猫的攻击序列为:1、攻击,2、攻击,3、格挡,4、格挡
 
那么该局擂台赛的情况如下:
 
 小猴的血量小猫的血量
回合0(初始)510
回合158
回合248
回合327
回合427
回合525
回合615
回合7(游戏结束)-14
 
 
此时,两个小动物跳上了擂台,他们谁能取得最后的胜利呢?

 

Input

 输入包含4行。

第一行包含3个整数HPA,ATA和DFA,为小动物A的三项基本属性:血量,攻击力和防御力。
第二行为小动物A的攻击计划。首先为一个整数KA(KA<100),表示攻击计划包含KA个回合。接下来为KA个1或2,描述攻击计划中每一回合的动作,其中1表示攻击,2表示格挡。
第三行包含3个整数HPB,ATB和DFB,为小动物B的三项基本属性:血量,攻击力和防御力。
第四行为小动物B的攻击计划。首先为一个整数KB(KB<100),表示攻击计划包含KB个回合。接下来为KB个1或2,描述攻击计划中每一回合的动作,其中1表示攻击,2表示格挡。

Output

 输出只有一行。

若为平局,则输出"tie";
若小动物A胜,则输出"A";
若小动物B胜,则输出"B";
我们保证,在1,000,000个回合内必定有小动物退场。

Sample Input

5 5 54 1 2 1 210 3 34 1 1 2 2

Sample Output

B
 
水题,直接模拟该过程即可
 
 
  
#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;int main(){    int ahp,aatk,adef,bhp,batk,bdef;    int a[105],b[105],i,j,na,nb;    while(~scanf("%d%d%d",&ahp,&aatk,&adef))    {        scanf("%d",&na);        for(i = 0; i<na; i++)            scanf("%d",&a[i]);        scanf("%d%d%d",&bhp,&batk,&bdef);        scanf("%d",&nb);        for(i = 0; i<nb; i++)            scanf("%d",&b[i]);        i = j = 0;        while(ahp>0 && bhp>0)        {            if(a[i] == 1 && b[i] == 1)            {                ahp = min(ahp-(batk-adef),ahp);                bhp = min(bhp-(aatk-bdef),bhp);            }            else if(a[i] == 1 && b[i] == 2)            {                ahp = min(ahp-(aatk-bdef),ahp);                bhp--;            }            else if(b[i] == 1 && a[i] == 2)            {                bhp = min(bhp-(batk-adef),bhp);                ahp--;            }            i++;            j++;            i%=na;            j%=nb;        }        if(ahp<=0 && bhp<=0)            printf("tie");        else if(ahp<=0)            printf("B");        else            printf("A");        printf("\n");    }    return 0;}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值