模拟赛(二):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;
}

原文地址:https://www.cnblogs.com/Wild-Donkey/p/12271185.html

时间: 2024-08-03 03:00:18

模拟赛(二):T118878 阴云密布(代码极度哲学,慎点)的相关文章

复习---归并排序求逆序对--计蒜客2017noip模拟赛二--蒜头君的排序

题目链接:https://nanti.jisuanke.com/t/16443 我不会矩阵快速幂,所以只拿了60分, 发现归并排序掌握的并不熟练,借此良机复习一下. 重在归并排序分治思想,要牢记! #include<iostream> #include<cstring> using namespace std; int n,m,a[30005],s[30005],ans,d[30005]; void msort(int l,int r) { if(l==r)return;//如果只

noip模拟赛 写代码

分析:这其实就是括号匹配题,一眼贪心题,不过一开始贪错了,以为([)]是合法的......其实括号之间不能嵌套. 一开始的想法是尽量往左边填左括号,因为每种括号的数量都确定了,那么左括号和右括号的数量也就确定了,但是这样会有一个问题:1 1 1 2 3 1 1 3 2 1,最后两个1被指定为右括号,这样的贪心会使它嵌套.正着贪心似乎很难,沿用之前模拟赛的思路,倒着贪心:从已知推向未知. 题目中告诉了右括号的位置,从后往前枚举,为了尽可能地防止嵌套,在右边如果能放左括号就尽量放左括号,不行就放右括

【题解】PAT团体程序设计天梯赛 - 模拟赛

由于本人愚笨,最后一题实在无力AC,于是只有前14题的题解Orz 总的来说,这次模拟赛的题目不算难,前14题基本上一眼就有思路,但是某些题写起来确实不太容易,编码复杂度有点高~ L1-1 N个数求和 设计一个分数类,重载加法运算符,注意要约分,用欧几里得算法求个最大公约数即可. 1 #include <cstdio> 2 3 long long abs(long long x) 4 { 5 return x < 0 ? -x : x; 6 } 7 8 long long gcd(long

2018 蓝桥杯省赛 B 组模拟赛(一)

2018 蓝桥杯省赛 B 组模拟赛(一) A.今天蒜头君带着花椰妹和朋友们一起聚会,当朋友们问起年龄的时候,蒜头君打了一个哑谜(毕竟年龄是女孩子的隐私)说:“我的年龄是花椰妹年龄个位数和十位数之和的二倍”. 花椰妹看大家一脸懵逼,就知道大家也不知道蒜头君的年龄,便连忙补充道:“我的年龄是蒜头君个位数和十位数之和的三倍”. 请你计算:蒜头君和花椰妹年龄一共有多少种可能情况? 提醒:两位的年龄都是在 [10,100)[10,100) 这个区间内. 题解: 暴力枚举 answer: 1 代码如下: #

20180610模拟赛T1——脱离地牢

Description 在一个神秘的国度里,年轻的王子Paris与美丽的公主Helen在一起过着幸福的生活.他们都随身带有一块带磁性的阴阳魔法石,身居地狱的魔王Satan早就想着得到这两块石头了,只要把它们溶化,Satan就能吸收其精华大增自己的魔力.于是有一天他趁二人不留意,把他们带到了自己的地牢,分别困在了不同的地方.然后Satan念起了咒语,准备炼狱,界时二人都将葬身于这地牢里. 危险!Paris与Helen都知道了Satan的意图,他们要怎样才能打败魔王,脱离地牢呢?Paris想起了父王

2019模拟赛09场解题报告

目录 2019模拟赛09场解题报告 目录la~~ 题一:瞬间移动 题二:食物订购 题三:马蹄印 题四:景观美化 2019模拟赛09场解题报告 标签(空格分隔): 解题报告 Forever_chen 2019.8.20 目录la~~ 题一:瞬间移动 [题面] 有一天,暮光闪闪突然对如何将一个整数序列a1,a2,...,an排序为一个不下降序列起了兴趣.身为一只年轻独角兽的她,只能进行一种叫做"单元转换"(unit shift)的操作.换句话说,她可以将序列的最后一个元素移动到它的起始位置

10.30 NFLS-NOIP模拟赛 解题报告

总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没码QAQ 现在我来写解题报告了,有点饿了QAQ.. 第一题 题目 1: 架设电话线 [Jeffrey Wang, 2007] 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务,于 是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线.新的电话线架设 在已有的N(2 <=

9.14 模拟赛

模拟赛第三弹~ T1 题意:给你一个数列,要求删掉任意一种整数,使得剩下的新数列中连续的相等的数最多 例如 2 7 3 7 7 3 3 7 7 5 7,删掉3以后剩的7有四个连续的,最多 思路:暴力枚举去掉哪个......这算是一道水题吧 代码丢了...... TAT T2 题意:有n本书,每本书有宽度和高度.现在你有无数个书架,每个书架的宽度为w,高度由最高的书决定 问在书本按顺序放的情况下,总的书架高度最小是多少 思路:dp,dp[i]表示做到第i本书时的最小高度和. 每次先找到能以编号j的

20161027模拟赛解题报告

20161027模拟赛解题报告 By shenben T1 数学题 模拟即可. 注意开long long T2 技巧题 图片为本题第一张图.(无奈,图传不上来) 首先第一问图中的“Y 字形”的数量,这么简单,在此不细讲. 详见代码 O(n)累加一下就好了 主要说说第二问怎么搞 预处理 每个点分别与其他那些点相连 权值为第1,2,3大(若没有2,3大,就忽略).记录一下权值与对应的点的标号.目的是方便下面的判断. 枚举入度>=3的点,即点B(有多个) 再枚举点B相连的D点(不是点A,C). Ste