P8199 [传智杯 #4 决赛] 游戏
题目背景
小智正在看 B 站非著名 up 主脚踢喷火幼儿园(下称喷火)和他的朋友 ATA_Radio_STN 和 sltheen 正在游玩著名游戏《PLAYERUNKNOWN’S BATTLEGROUNDS》(绝地求生:大逃杀)。
题目描述
喷火刚刚跳伞落地,周围危机四伏,他的手中有一个初始背包,他捡到的所有物资都会装在这个背包里,游戏地图被简化为一个 $n \times m$ 的网格图,每个格子里要么是物资,要么是敌人。
物资分为主/副武器和弹药,其中弹药又分为子弹与投掷物。每种武器会对应使用某种子弹。例如:Beryl M762 突击步枪使用 7.62mm 子弹,M416 突击步枪使用 5.56mm 子弹,而 AKM 突击步枪也使用 7.62mm 子弹。
当喷火走到一个含有物资的格子的时候,他会拾起地上的物资并放入背包。但背包容量有限,因此当背包装满的时候,他将会扔掉一部分物资以装下新的物资。他将按照以下规则丢弃物资:
1. 如果捡到的是武器,那么按照霰弹枪>突击步枪>射手步枪>栓动步枪>空手的优先级进行替换。优先替换主武器,且主武器优先级必须严格高于副武器。如果替换主武器,那么替换下来的主武器被**直接丢弃**,不再用其替换副武器。
2. 若有不需要的子弹(指主副武器均不使用的子弹),最优先丢掉这些子弹,直至空间足够装下新的物资。
3. 若丢掉全部不需要子弹后空间仍旧不足,或有多种不需要的子弹,优先丢掉最晚拾取时间最早的弹药(包括主副武器使用的子弹和投掷物),直至空间足够装下新的物资(需要注意的是,即使新物资是「不需要的子弹」,在丢掉所有原有的「不需要的子弹」后如果背包空间还是不够,则喷火依然会丢掉其他弹药直到捡起所有「不需要的子弹」)。
4. 无论捡到的是新物资,还是已经有的物资,该物资的最晚拾取时间都将被更新为当前时间点。
5. 武器最多同时持有两种,即主/副武器,同优先级的主/副武器不进行替换。
每个格子的物资只会拾取一次。当第二次进入某个格子的时候,物品不会刷新,即不会捡起上次在这个格子丢掉的物品,也不会再次捡到初始时的物品。
当喷火走到含有敌人的格子的时候,他会与敌人进行战斗,他的战斗力很强悍,只需要有足够的子弹即可消灭敌人。每个敌人有两个参数 $a,b$,代表需要消耗 $a$ 发主武器子弹,若主武器子弹不够,则不消耗主武器子弹,而消耗 $b$ 发副武器子弹。若主副武器均没有足够子弹,则喷火被敌人反杀,然后敌人会在喷火的盒子上做蹲起嘲讽他。
每个格子的敌人只会出现一次。如果第二次进入某一个有敌人的格子,则什么都不会发生。
现在,喷火跳在了第一行第一列的格子上,ATA_Radio_STN 已经为喷火摸清了地图形势,而 sltheen 会给喷火下指示,喷火想知道,当他执行完最后一条指示之后,他是否还存活,若存活,按照最晚拾取时间时间从早到晚,输出背包内物品种类和数量,若死亡,输出他死亡格子的坐标。
下附可能出现的物资、物资类别、物资使用的子弹种类、物资所需空间以及物资对应编号。
武器:
| 武器名称 | 武器类型| 使用的子弹类型 | 编号 |
| --- | --- | --- | ---|
| 空手 | 空手 | N/A | 0|
|BerylM762|突击步枪|7.62mm子弹|1|
|AKM|突击步枪|7.62mm子弹|2|
|SKS|射手步枪|7.62mm子弹|3|
|Kar98K|栓动步枪|7.62mm子弹|4|
|M416|突击步枪|5.56mm子弹|5|
|MK12|射手步枪|5.56mm子弹|6|
|Mini14|射手步枪|5.56mm子弹|7|
|S686|霰弹枪|12号霰弹|8|
|DBS|霰弹枪|12号霰弹|9|
弹药
|弹药名称| 类型 | 占用空间 | 编号 |
| - | - | - | - |
|FragGrenade|投掷物| 5 | 10|
|SmokeGrenade| 投掷物 | 4| 11|
|MolotovCocktail |投掷物 | 3 | 12|
|Flashbang |投掷物 | 2 | 13|
|7.62mm |子弹 |0.2| 14|
|5.56mm| 子弹| 0.1 |15|
|3in(12号霰弹)| 子弹| 0.5| 16|
请注意,上表中子弹的「占用空间」表示一发子弹所占用的空间。
另外,敌人在地图上的编号为 17。
输入格式
第一行有四个整数,依次表示地图行数 $n$,列数 $m$,背包容量 $k$,和 sltheen 会下达的指令条数 $t$。
接下来的 $n\times m$ 行中,第 $i$ 行代表第 $\lfloor\frac{i - 1}{n}\rfloor+1$ 行,第 $(i - 1)\%n+1$ 列的地图情况,其中 $i \% n$ 表示 $i$ 除以 $n$ 的余数:
- 此处若是物资,则本行有两个空格隔开的整数,为物资编号 $x$ 和物资数量 $y$,物资编号见「题目描述」中表格的最后一列(如果该物资是枪,则保证 $y = 1$);
- 若此处是敌人,则本行有三个空格隔开的整数,第一个整数为 $17$,代表敌人,接下来两个整数依次表示敌人的 $a, b$ 两个参数。
接下来 $t$ 行,每行一个整数 $op$,表示 sltheen 为喷火下达的指令的移动方向:1 代表向上,2 代表向下,3 代表向左,4 代表向右。(第一行第一列是地图的左上角,最后一行第一列是地图的左下角)
输出格式
如果喷火死亡,则输出两个数 $u, v$,代表喷火在第 $u$ 行第 $v$ 列死亡。
若喷火未死亡,先输出两行,第一行为主武器编号,第二行为副武器编号,之后输出若干行,每行为两个整数整数,中间用空格隔开,第一个整数为物资名称,第二个整数为其数量,按照最后捡到时间从早到晚排序。
说明/提示
### 数据规模与约定
对于全部的测试点,保证:
- $1 \leq n, m \leq 100$,且 $1 \leq n \times m \leq 100$。
- $1 \leq k \leq 500$,$1 \leq t,a,b \leq 200$。
- $1 \leq x \leq 16$,$1 \leq y \leq 5000$。
- $1 \leq op \leq 4$。
- 数据保证每个格子内只有一种物资(或一个敌人),且背包能够装下任意一格的物资。