SDUTOJ4337_最终之战(18级期末上机考试一)

最终之战

Time Limit: 1000 ms Memory Limit: 65536 KiB

Submit Statistic

Problem Description

    

恭喜大家来到最终之战。这对珂朵莉一行来说是非常重要的一战,同时也极有可能是决定你能否在本次期末考试中成功AK,收获满分的一战,祝大家战斗胜利。

 

为了简化战斗过程,尽可能的用最小的损失来赢得战斗,我们制定了如下的战斗规则:

     战斗开始后,我方会按照输入的顺序依次派出血量大于 0 的妖精循环攻击兽( 最后一人攻击完后再从第一个人开始依次攻击),每次攻击时所实际输出的攻击力为妖精的攻击力与所持圣剑之和,由于兽具有防御,兽实际收到的伤害为所受攻击的攻击力减去自身的防御力。攻击时优先攻击体型较大的兽。攻击结束后我方妖精同样会受到所攻击兽的攻击,受到的伤害同样为兽的攻击力减掉我方妖精的防御力。同时由于速度的不同,若我的速度大于所攻击兽的速度,我可以额外攻击一次相同的兽,若我的速度小于所攻击兽的速度 ,则兽可以多攻击我一次。

注意,若被攻击后血量小于等于0,则认为他已经牺牲了,将不会再参与之后回合的战斗,但当前回合不受影响,例如在某一回合中,兽受到攻击后血量降低至0一下,但它依然可以在本回合中发起反击。

 

下面是兽的数据:

中文名                  英文名(id)  血      功    防   速      体型
叹月的最初之兽    Chantre       2333   100   7    input    9
深潜的第六兽        Timere        600      34    4    input    8
穿凿的第二兽        Aurora        200      24    3    input    7
绞吞的第四兽        tarde           400     43     9    input    6
广覆的第五兽        Materno      500     34     3    input    5
沉滞的第十一兽    Croyance    1100    65    6    input    4
织光的第十四兽    Vinkra         1400    90    2    input    3

 

下面是圣剑的数据:

中文名           英文名(id)   加成 

珀西瓦尔       Perseval          78 
瑟尼欧里斯   Ceniolis            43 
瓦尔卡利斯   Valgaris            110
印萨尼亚       Insania             23

现在请你根据输入的数据判断能否在100回合内获胜,若可以获胜,输出攻击的最少回合数,否则输出“BOOM!”。

Input

首先输入四行,每行由五部分组成,分别是要派出的妖精的名字,血量,攻击值,防御值,速度和所拿的武器名。

最后一行包含七个空格分隔的数字,代表按体型由大到小的兽的速度。

妖精和武器的名字是一个长度不超过10的不含空格的字符串,1<=血量<=2000,10<=攻击值<=100,1<=防御值<=100,1<=速度<=10。

Output

若可以获胜(所有兽的血量均小于等于0),输出攻击的最少回合数,否则输出“BOOM!”。

Sample Input

Willem 2000 100 100 10 Valgaris
Chtholly 1500 70 40 9 Perseval
Nephren 1000 56 45 6 Insania
Ithea 500 65 54 5 Ceniolis
9 4 3 5 3 2 6

Sample Output

33

Hint

我方每派出一名妖精战斗即视为回合数加一。

实际所受攻击可能小于零,例如,当所受攻击力为5,自身防御力为10的时候,实际所受攻击为5-10=-5,这时无需特殊判断,可以理解为当攻击过小时,被攻击一方可化攻击为血量,血量上升。

Source

行走的二叉树

 

虽然是一道不是很难得模拟题,但在期末考试过程没能a掉他 重现a掉了   emmm  时间不够了 我敲完输入就剩2分钟了(前面的题因为没读清题wa了好几次  吃了罚时 emm )

过程不难理清题意就OK了

那个100回合以内是个坑点 没用

#include <bits/stdc++.h>
using namespace std;
struct node
{
    int xue;
    int gong;
    int fang;
    int su;
};
int main()
{
    char s[13], s1[14];
    node wo[5], di[10];
    int sum = 0;
    for (int i = 1; i <= 4; i++)
    {
        cin >> s >> wo[i].xue >> wo[i].gong >> wo[i].fang >> wo[i].su >> s1;
        sum += wo[i].xue;
        if (strcmp(s1, "Perseval") == 0)
            wo[i].gong += 78;
        if (strcmp(s1, "Ceniolis") == 0)
            wo[i].gong += 43;
        if (strcmp(s1, "Valgaris") == 0)
            wo[i].gong += 110;
        if (strcmp(s1, "Insania") == 0)
            wo[i].gong += 23;
    }
    di[9].xue = 2333, di[9].gong = 100, di[9].fang = 7;
    di[8].xue = 600, di[8].gong = 34, di[8].fang = 4;
    di[7].xue = 200, di[7].gong = 24, di[7].fang = 3;
    di[6].xue = 400, di[6].gong = 43, di[6].fang = 9;
    di[5].xue = 500, di[5].gong = 34, di[5].fang = 3;
    di[4].xue = 1100, di[4].gong = 65, di[4].fang = 6;
    di[3].xue = 1400, di[3].gong = 90, di[3].fang = 2;

    for (int i = 9; i >= 3; i--)
        cin >> di[i].su;

    int cnt = 0; // 记录回合数
    int k = 9;
    while (1)
    {
        int cntt = 0;
        for (int i = 1; i <= 4; i++)
        {
            if (wo[i].xue > 0)
            {
                for (k = 9; k >= 3; k--)
                {
                    if (di[k].xue > 0)
                    {
                        cnt++;
                        di[k].xue = di[k].xue - (wo[i].gong - di[k].fang);
                        wo[i].xue = wo[i].xue - (di[k].gong - wo[i].fang);

                        if (wo[i].su > di[k].su && di[k].xue > 0)
                        {
                            di[k].xue = di[k].xue - (wo[i].gong - di[k].fang);
                        }
                        else if (wo[i].su < di[k].su && wo[i].xue > 0)
                        {
                            wo[i].xue = wo[i].xue - (di[k].gong - wo[i].fang);
                        }
                        break;
                    }
                }
            }
            else
                cntt++; // 标记我方精灵是否全死掉

            if (k == 2 || cntt == 4) // 兽全挂 k==2 我方全挂 cntt == 4
                break;
        }
        if (cntt == 4 && di[3].xue > 0) // 我方精灵全挂 对方体型最小的血还大于0
        {
            cout << "BOOM!" << endl;
            break;
        }
        if (di[3].xue <= 0)
        {
            cout << cnt << endl;
            break;
        }
    }
    return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值