Kevin大战僵尸
题号:NC266713
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

题面PDF
点击下载

游戏背景

《Kevin 大战僵尸》\sf(\ Kevin\ vs.\ Zombies\ ) 是一款多植物、多僵尸的策略型游戏。
在这个游戏中,氧气少年将购买、安放植物,令植物不断与进攻的僵尸战斗。

植物团队由不同类型的植物组成,每种植物都有独特的能力。
僵尸则尝试穿越草地,到达屋子。

氧气少年的目标是使用各种植物来防御不同类型的僵尸,防止僵尸们穿越草地,到达屋子,以取得最终的胜利。

游戏目的

我方:阻止所有僵尸穿越草地,进入屋子。
敌方:至少一只僵尸成功穿越草地,进入屋子。

游戏介绍

游戏在一个 59 列的草地进行。
设游戏开始时的时刻为 1。游戏开始后,僵尸便会开始生成,具体的生成时刻和生成位置将在输入中给出。同时,氧气少年也可以购买、放置植物。此时花园中没有植物,氧气少年拥有的初始金钱数为 w

植物介绍

氧气少年可以购买某种植物,当且仅当氧气少年的金钱数达到这种植物的价格,购买后,氧气少年可以将此植物放置在草地的任意格子(当前格子有其他植物占用的除外)。购买和放置均不消耗时间。

1. 豌豆射手 \sf(\ Peashooter\ )


当某棵豌豆射手被种植后,它会立马射击一次,发出一个豌豆子弹,攻击所在行上的第一个僵尸(如果有),此后每 t_1 秒向前射击一次。每次攻击令此僵尸的生命值减少 a_1,如果此僵尸受到攻击后,生命值减少到 0,那么此僵尸将会死亡并退出战场。子弹的速度可视为无穷大。

价格:100
生命值:50

2. 寒冰射手 \sf(\ Snow\ Pea\ )


当某棵寒冰射手被种植后,它会立马射击一次,发出一个寒冰豌豆子弹,攻击所在行上的第一个僵尸(如果有),此后每 t_2 秒向前射击一次。每次攻击令此僵尸的生命值减少 a_2,如果此僵尸受到攻击后,生命值减少到 0,那么此僵尸将会死亡并退出战场。子弹的速度可视为无穷大。
同时,每受到一次攻击,僵尸的行进速度变为原来的 50\%,即:设当前僵尸移动速度为 x 秒 / 格,那么受到一次此攻击后,移动速度变为 2\times x 秒 / 格。请注意,此效果可以叠加。

价格:200
生命值:70

3. 坚果墙 \sf(\ Wall-nut\ )


具有较高的生命值,不会攻击僵尸,作用是阻挡僵尸前进。

价格:50
生命值:150

4. 向日葵 \sf(\ Sunflower\ )


不会攻击僵尸。作用是生产太阳光,当某棵向日葵被种植后,它会立马生产一个太阳光,此后每 t_3 秒生产一个太阳光。生产的太阳光会立马被收集起来,一个太阳光会带来 50 的金钱。

价格:50
生命值:50

僵尸介绍

氧气少年需要面对 n 个僵尸的攻击。每个僵尸的出生地点都是某一行的最右侧,即某一行的第 9 列。具体的生成时刻和生成行数将在输入中给出。
每个僵尸的活动范围是自己出生时所在的行,也就是说行进方向为从右到左(从第 9 列到第 1 列)。
当某只僵尸向左越过第 1 列 (即到达第 0 列)时,游戏失败。
当僵尸与植物处在同一个位置时,僵尸会暂停移动并吞噬植物------每 1 秒僵尸会让植物的生命值减少 1,当植物的生命值减少到 0 的时候,植物会死亡,僵尸会在下一秒继续移动。但如果僵尸在吞噬植物的过程中死去,那么吞噬停止。

1. 普通僵尸 \sf(\ Normal\ Zombie\ )

生命值:200
移动速度:1 秒 / 格

2. 路障僵尸 \sf(\ Conehead\ Zombie\ )

拥有更高的生命值。

生命值:400
移动速度:2 秒 / 格

你的任务

假如氧气少年采取最优策略,请求出最小的 w,使得氧气少年可以获得胜利。

输入描述:

第一行包含六个整数 n(1\leq n\leq 2\cdot 10^5),t_1(1\leq t_1\leq 20),a_1(1\leq a_1\leq 1000),t_2(1\leq t_2\leq 20),a_2(1\leq a_2\leq 1000),t_3(1\leq t_3\leq 20)

接下来 n 行,每行包含一个字符 c 和两个整数 t(1\leq t\leq 10^9),p(1\leq p\leq 5)

  •  如果 c=\tt N,代表此僵尸是普通僵尸,它出生的时刻是 t,出生的位置是第 p 行第 9 列;
  •  如果 c=\tt C,代表此僵尸是路障僵尸,它出生的时刻是 t,出生的位置是第 p 行第 9 列。

保证不会有超过 1 个僵尸于同一时刻和同一位置出生。

输出描述:

仅输出一行,包含一个整数,表示答案。
示例1

输入

复制
8 5 100 10 50 5
C 1 5
N 2 2
N 3 3
C 2 4
N 5 2
C 7 4
N 8 5
N 4 1

输出

复制
50