#P15105. [ICPC 2025 LAC] Keep Fighting

    ID: 15133 远端评测题 500ms 1024MiB 尝试: 0 已通过: 0 难度: 6 上传者: 标签>模拟数学贪心二分2025三分ICPC

[ICPC 2025 LAC] Keep Fighting

说明

Bob 正在玩一个需要击败怪物的卡牌游戏。在游戏开始前,Bob 的攻击力被设定为 PP,怪物的生命值被设定为 HH,并且 Bob 手上有 NN 张卡牌。

牌库中的每张卡牌属于以下类型之一:

  • 乘法:此类卡牌上写有一个数字 XX。使用它会使 Bob 当前的攻击力乘以 XX
  • 加法:此类卡牌上也写有一个数字 YY。使用它会使 Bob 当前的攻击力增加 YY
  • 攻击:此类卡牌允许 Bob 攻击怪物。使用它会使怪物的当前生命值减少 Bob 当前的攻击力。

游戏按回合进行。在每个回合中,Bob 必须从他手中恰好打出一张卡牌,之后该卡牌被移到弃牌堆。如果在一个回合结束时 Bob 手中没有剩余卡牌,他会取回弃牌堆中的所有卡牌,并可以以任意顺序再次使用它们。

一旦怪物的生命值达到 00 或更低,怪物就被击败。Bob 有可能击败怪物吗?如果可以,所需的最少回合数是多少?

输入格式

第一行包含三个整数 NN1N501 \le N \le 50)、PP0P1090 \le P \le 10^9)和 HH1H1091 \le H \le 10^9),分别表示牌库中的卡牌数量、Bob 的初始攻击力和怪物的初始生命值。

接下来的 NN 行描述每张卡牌。每行的内容取决于卡牌的类型,如下所示:

  • 乘法:该行包含字符 “*”(星号)和一个整数 XX1X1091 \le X \le 10^9),表示该卡牌提供的乘数。
  • 加法:该行包含字符 “+”(加号)和一个整数 YY1Y1091 \le Y \le 10^9),表示该卡牌提供的增量。
  • 攻击:该行包含字符 “!”(感叹号)。

输出格式

输出一行,包含一个整数,表示击败怪物所需的最少回合数;或者,如果无法击败怪物,则输出字符 “*”(星号)。

3 0 20
* 2
!
+ 5
4
1 0 1
!
*
1 1 1
+ 1
*

提示

样例 1 解释:

为了在 4 回合内击败怪物,Bob 可以按以下方式出牌:

  1. Bob 打出 +5+5 卡牌,因此他的攻击力变为 55
  2. Bob 打出 2*2 卡牌,因此他的攻击力变为 1010
  3. Bob 打出 !! 卡牌,因此怪物的生命值变为 1010。由于此时 Bob 手中没有卡牌,所有三张卡牌回到他手中。
  4. Bob 打出 !! 卡牌,因此怪物的生命值变为 00,怪物被击败。

翻译由 DeepSeek V3 完成