模拟赛:T118878 阴云密布(代码极度哲学,慎点)

Posted wild-donkey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模拟赛:T118878 阴云密布(代码极度哲学,慎点)相关的知识,希望对你有一定的参考价值。

2020.2.6

模拟赛(二)

T1 阴云密布(改编)

题目描述

杰哥有三个属性:生命值,魔法值,能量值。杰哥有如下三种基本技能:充能,攻击,魔法。杰哥的初始生命值Ht1,能量值和魔法值为0。阿伟的初始生命值为Ht2。

战斗有n轮,每轮杰哥会发动3个基本技能(杰哥耍赖。

攻击Blast: 对于第i个基本技能,如果它是攻击,设能量值Pw,那么伤害为(Pw+1)?Fst1~i~。然后能量值清0。

充能Charge: 对于第i个基本技能,如果它是充能,那么伤害为Elc~i~。然后能量值增加1。

魔法Accele: 对于第i个基本技能,如果它是魔法,设能量值Pw,那么伤害为?2x+2??Fa~i~,魔法值增加?x+1??Fa然后能量值清0。

组合技能Combo: 如果这3个技能都是充能,那么能量值额外增加Cmb~1~。如果这3个技能都是魔法,那么魔法值额外增加Cmb~2~。如果这3个技能都是攻击,那么造成的伤害额外增加Cmb~3~。

放大招Magia: 如果魔法值达到Dark1,那么你会先放大招再执行本轮的三个基本技能。放大招会让生命值增加Dark2,对敌人造成伤害Dark3。放完大招后魔法值为Dark4。当然,Dark4<Dark1。

Buff状态(无双暴气): 放完大招后的一轮中,所有技能造成的伤害翻倍(包括额外增加的伤害),受到敌人伤害减半(向下取整)。Buff状态只持续一轮。

每轮若阿伟不死,阿伟会对杰哥造成Fst2伤害。此时你杰哥魔法值会怒增Agr。

输入格式

第一行输入n,Ht1,Ht2

第二行输入Fst11,Fst12,Fst13,Elc1,Elc2,Elc3,Fa1,Fa2,Fa3,Fa。

第三行输入Cmb1,Cmb2,Cmb3,Dark1,Dark2,Dark3,Dark4。

第四行输入Fst2,Agr。

接下来n行输入每一轮的3个技能,每行三个字母,B表示攻击,C表示充能,A表示魔法。

输出格式

输出一行字符串。字符串应是LoseWinError中的一个。

输入输出样例

输入 #1

4 27922 140000
7000 8000 10000 4000 5000 6000 2000 3000 4000 7
2 20 3000 100 0 200000 40
8000 5
ACB
ACB
ACB
ACB

输出 #1

Lose

输入 #2

3 27922 140000
7000 8000 10000 4000 5000 6000 2000 3000 4000 9
2 20 3000 100 0 200000 40
8000 5
AAA
AAA
AAA

输出 #2

Win

输入 #3

3 27922 140000
7000 8000 10000 4000 5000 6000 2000 3000 4000 7
2 20 3000 100 0 200000 40
8000 5
CBA
CAB
CCB

输出 #3

Error

题解:

游戏的编写,这是一道简单模拟,初学者都会。

这题输入是真的神仙,第一行三个数,第二行10个数,第三行7个数,第四行2个数,还没开始循环,已经输入22个变量了。

模拟就是了,暴力即正解

自己的AC代码:

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;//在这款游戏中,你将操作杰哥,和阿伟斗法
long long n, Ht1/*杰哥的血*/, Ht2/*阿伟的血*/,Pw=0/*杰哥没有内力*/,Mgc=0/*杰哥当然也没有法力*/,Fst1[4]/*杰哥的铁拳*/,Fst2/*阿伟的铁拳*/, Agr/*杰哥挨揍的怒气*/,Elc[4]/*杰哥充电器漏的电*/, Fa[4]/*杰哥奇妙魔FA♂*/, Cmb[4]/*杰哥连击*/, Dark[5]/*杰哥Dark♂招*/;
char Do[4];//每回合杰哥的3个基础技能
bool Buff = 0;//杰哥无双暴气
int main() {
    scanf("%lld%lld%lld", &n, &Ht1, &Ht2);
    scanf("%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld", &Fst1[1], &Fst1[2], &Fst1[3], &Elc[1], &Elc[2], &Elc[3], &Fa[1], &Fa[2], &Fa[3], &Fa[0]);
    scanf("%lld%lld%lld%lld%lld%lld%lld", &Cmb[1], &Cmb[2], &Cmb[3], &Dark[1], &Dark[2], &Dark[3], &Dark[4]);
    scanf("%lld%lld", &Fst2, &Agr);//以上全是输入
    for (int i = 1; i <= n; i++) {//n个回合
        if (Mgc >= Dark[1]) {//判断能否放Dark♂招
            Ht1 += Dark[2];//自我治疗
            Ht2 -= Dark[3];//阿伟受到攻击
            Mgc = Dark[4];//魔法值增长
            Buff = 1;//开启无双暴气模式
        }
        scanf("%s", &Do);//本轮操作
        for (int j = 1; j <= 3; j++) {//三组操作
            if (Do[j-1] == 'A') {//Magic
                if (Buff) {
                    Ht2 -= (((Pw + 2) / 2) * Fa[j] * 2);//buff加持,双倍攻击
                }
                else {
                    Ht2 -= (((Pw + 2) / 2) * Fa[j]);//魔法攻击
                }
                Mgc += (int(sqrt(Pw + 1) / 1) * Fa[0]);//杰哥魔法增加
                Pw = 0;//能量耗尽
            }
            if (Do[j-1] == 'B') {//Attack
                if (Buff) {
                    Ht2 -= ((Pw + 1) * Fst1[j] * 2);//buff加持,双倍攻击
                }
                else {
                    Ht2 -= ((Pw + 1) * Fst1[j]);//杰哥一拳
                }
                Pw = 0;//能量耗尽
            }
            if (Do[j-1] == 'C') {//Charge
                if (Buff) {//buff加持,漏电更多
                    Ht2 -= (2 * Elc[j]);
                }
                else {
                    Ht2 -= Elc[j];//阿伟被漏电事故重伤
                }
                Pw ++;//能量补充
            }
            if (Ht2 <= 0) {//AWSL
                cout << "Win" << endl;
                return 0;
            }
        }
        if ((Do[0] == Do[1]) && (Do[1] == Do[2])) {//三个操作相同触发Combo
            if (Do[0] == 'A') {//额外魔法奖励Super Magic
                Mgc += Cmb[2];
            }
            if (Do[0] == 'B') {//额外攻击奖励Super Attack
                if (Buff) {
                    Ht2 -= (Cmb[3] * 2);//奖励也有Buff加持
                }
                else {
                    Ht2 -= Cmb[3];
                }
            }
            if (Do[0] == 'C') {//额外能量奖励Super Charge
                Pw += Cmb[1];
            }
        }
        if (Ht2 <= 0) {//AWSL
            cout << "Win" << endl;
            return 0;
        }
        if (Buff) {//buff加持下,阿伟变弱
            Ht1 -= (Fst2 / 2);//AW Attack
        }
        else {
            Ht1 -= Fst2;//AW Attack
        }
        Mgc += Agr;//杰哥 Angry
        if (Ht1 <= 0) {//杰哥死了
            cout << "Lose" << endl;
            return 0;
        }
        Buff = 0;//一轮过后,buff消失
    }
    cout << "Error" << endl;//幸福生活
    return 0;
}

以上是关于模拟赛:T118878 阴云密布(代码极度哲学,慎点)的主要内容,如果未能解决你的问题,请参考以下文章

ChatGPT 成学生“作弊神器”?教授:“我感到极度恐惧”

进程调度模拟——哲学家进餐问题

春江水暖鸭先知

餐饮哲学家 Java

IPC典型模型-哲学家纠缠问题

操作系统作业哲学家就餐问题