#1081. [202312月赛] 冒险旅程

[202312月赛] 冒险旅程

背景

小方小块小鸟来到了方块鸟大陆。方块鸟大陆上有许许多多有意思的地区和地下城、迷宫等待冒险者们挑战。通过击败BOSS还能拿到珍贵的战利品。 我们需要通过编程尽可能的为小方小块小鸟提供帮助。

描述

小方小块小鸟先是通过在练习场地刷史莱姆升级到「新手的冒险者」级别,再进行了一些祈福仪式。他们现在的初始状态分别是血量上限max_hpmax\_hp、攻击力attackattack、防御力defensedefense

现在,他们向着菜鸟平原出发,准备开始他们的方块鸟大陆首次探险之旅。工会导师在出发前给他们做最后的讲解,他把在方块鸟大陆地下城探险的过程告诉他们。

在地下城的探险过程中,冒险者们会按照顺序遇到nn个随机事件。在nn个事件后,如果冒险者仍然存活 (血量大于00),则本次探险成功;如果在某个事件后,冒险者的血量小于或等于0,则冒险者被击败,本次探险失败。

事件分为如下类型:

事件类型 代号
遇到怪物 "BATTLE"
发现宝箱 "TREASURE"
找到篝火 "CAMPFIRE"
  • 当冒险者遇到怪物时,能通过怪物图鉴进行识别,得知怪物的血量monster_hpmonster\_hp、攻击力monster_attackmonster\_attack和防御力monster_defensemonster\_defense。 随后进入战斗环节,双方轮流进行攻击。双方各攻击一次,称为一个回合。每个回合中,均由冒险者先进行攻击。如果攻击方的攻击力小于被攻击方防御力,则本次攻击无效;否则被攻击方受到 (攻击方攻击力 - 被攻击方防御力) 的伤害, 损失相应的血量。血量小于等于0,则被击败,本次探险结束;否则继续下一轮攻击行动。如果战斗在第100100个回合结束后仍未分出胜负,则怪物会失去耐心而逃脱,冒险者以当前血量继续进行余下探险。
  • 当冒险者发现宝箱时,会得到宝箱中的宝物。宝物有三种类型item_typeitem\_type,分别为"POTION" ( 药水 )、"WEAPON" ( 武器 )、"ARMOR" ( 防具 ),宝物对冒险者的帮助如下:
宝物类型 功能 备注
POTION 增加本次探险过程的血量上限 获得时,仅提升血量上限,不会恢复血量
WEAPON 增加本次探险过程中的攻击力
ARMOR 增加本次探险过程中的防御力
  • 当冒险者找到篝火时,可以在篝火旁扎营休息,随后血量将恢复到血量上限。

假设你已经知道了冒险者的初始状态(包括血量上限max_hpmax\_hp、攻击力attackattack、防御力defensedefense),以及在某次探险过程所发生的事件,请你编写程序,判定冒险者是否成功完成探险。

输入输出格式

输入

第一行为三个非负整数max_hpmax\_hp, attackattack, defensedefense (0<max_hp,attack,defense1,000,000,0000 < max\_hp,attack,defense ≤ 1,000,000,000)。表示冒险者初始状态下的血量上限、攻击力和防御力,以空格分割。

第二行为一个正整数nn,表示冒险中遇到的事件数量。 (0<n10,0000 < n ≤ 10,000)

随后n2n * 2行,每两行表示一个事件的信息,其中: 第一行为一个字符串 event_typeevent\_type,表示事件类型,为 "BATTLE"、 "TREASURE"、"CAMPFIRE"之一; 第二行为事件相关信息:

  • 如果是BATTLE事件,则为怪物的血量monster_hpmonster\_hp、攻击力monster_attackmonster\_attack和防御力monster_defensemonster\_defense; (0<monster_hp,monster_attack,monster_defense10,0000 < monster\_hp, monster\_attack, monster\_defense ≤ 10,000)
  • 如果是TREASURE事件,则为宝物类型item_typeitem\_type和对应属性增加的数值pointpoint; ( item_typeitem\_type的值为 "POTION"、"WEAPON"、"ARMOR"之一 ; 0<point1,000,000,0000 < point ≤ 1,000,000,000)
  • 如果是CAMPFIRE事件,则为1。

输出

如果冒险者能成功完成探险,则输出探险完成时的剩余血量;如果探险失败,则输出探险者被击败时的血量。

样例

100 20 5
4
TREASURE
ARMOR 5
BATTLE
30 20 10
CAMPFIRE
1
BATTLE
100 15 10
55

样例一说明: 冒险者初始状态为100血量上限、20攻击力和5防御力。冒险过程中共计发生4个事件。 冒险者首先拿到了宝物,类型是防具,得到了5防御力的提升,随后探险过程中,防御力为10。 冒险者随后遇到了怪物,怪物有30血量、20攻击力和10防御力,冒险者先攻击,双方的战斗过程如下:

  • 第一回合

冒险者攻击,冒险者攻击力 20 - 怪物防御力 10 = 10点伤害,怪物的血量从 30 变成 20。 怪物攻击,怪物攻击力20 - 冒险者防御力 10 = 10点伤害,冒险者的血量从100 变成 90。

  • 第二回合

冒险者攻击,冒险者攻击力 20 - 怪物防御力 10 = 10点伤害,怪物的血量从 20 变成 10。 怪物攻击,怪物攻击力20 - 冒险者防御力 10 = 10点伤害,冒险者的血量从90 变成 80。

  • 第三回合

冒险者攻击,冒险者攻击力 20 - 怪物防御力 10 = 10点伤害,怪物的血量从 10 变成 0。

冒险者击败了怪物,剩余血量为80。

冒险者随后找到了篝火,恢复血量到血量上限100。 冒险者随后再次遇到怪物,怪物有100血量、15攻击力和10防御力。战斗后,冒险者剩余55血量。

所有事件完成,冒险者探险成功,输出最后剩余血量55.

10 20 5
3
BATTLE
30 9999 10
CAMPFIRE
1
BATTLE
100 15 10
-9984

样例二说明: 冒险者初始状态为10血量上限、20攻击力和5防御力。冒险过程中共计发生3个事件。 冒险者首先遇到了怪物,怪物有30血量,9999攻击力和10的防御力,战斗过程如下:

  • 第一回合

冒险者攻击,冒险者攻击力 20 - 怪物防御力 10 = 10点伤害,怪物的血量从 30 变成 20。 怪物攻击,怪物攻击力9999 - 冒险者防御力 = 9994点伤害,冒险者的血量从10 变成 -9984。

冒险者被击败,探险失败,输出冒险者被击败时的血量-9984。