• 模拟赛(二):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;
    }
    
  • 相关阅读:
    cmd常用命令
    快捷键
    leetcode:Sort List(一个链表的归并排序)
    leetcode:Merge Two Sorted Lists(有序链表的归并)
    leetcode:Search for a Range(数组,二分查找)
    leetcode:Search a 2D Matrix(数组,二分查找)
    实时操作系统与分时操作系统
    第四章函数作业题,函数模板
    第四章函数作业题,函数的重载
    第四章函数作业题,内置函数
  • 原文地址:https://www.cnblogs.com/Wild-Donkey/p/12271185.html
Copyright © 2020-2023  润新知