#P8199. [传智杯 #4 决赛] 游戏

[传智杯 #4 决赛] 游戏

题目背景

小智正在看 B 站非著名 up 主脚踢喷火幼儿园(下称喷火)和他的朋友 ATA_Radio_STN 和 sltheen 正在游玩著名游戏《PLAYERUNKNOWN’S BATTLEGROUNDS》(绝地求生:大逃杀)。

题目描述

喷火刚刚跳伞落地,周围危机四伏,他的手中有一个初始背包,他捡到的所有物资都会装在这个背包里,游戏地图被简化为一个 n×mn \times m 的网格图,每个格子里要么是物资,要么是敌人。

物资分为主/副武器和弹药,其中弹药又分为子弹与投掷物。每种武器会对应使用某种子弹。例如:Beryl M762 突击步枪使用 7.62mm 子弹,M416 突击步枪使用 5.56mm 子弹,而 AKM 突击步枪也使用 7.62mm 子弹。

当喷火走到一个含有物资的格子的时候,他会拾起地上的物资并放入背包。但背包容量有限,因此当背包装满的时候,他将会扔掉一部分物资以装下新的物资。他将按照以下规则丢弃物资:

  1. 如果捡到的是武器,那么按照霰弹枪>突击步枪>射手步枪>栓动步枪>空手的优先级进行替换。优先替换主武器,且主武器优先级必须严格高于副武器。如果替换主武器,那么替换下来的主武器被直接丢弃,不再用其替换副武器。
  2. 若有不需要的子弹(指主副武器均不使用的子弹),最优先丢掉这些子弹,直至空间足够装下新的物资。
  3. 若丢掉全部不需要子弹后空间仍旧不足,或有多种不需要的子弹,优先丢掉最晚拾取时间最早的弹药(包括主副武器使用的子弹和投掷物),直至空间足够装下新的物资(需要注意的是,即使新物资是「不需要的子弹」,在丢掉所有原有的「不需要的子弹」后如果背包空间还是不够,则喷火依然会丢掉其他弹药直到捡起所有「不需要的子弹」)。
  4. 无论捡到的是新物资,还是已经有的物资,该物资的最晚拾取时间都将被更新为当前时间点。
  5. 武器最多同时持有两种,即主/副武器,同优先级的主/副武器不进行替换。

每个格子的物资只会拾取一次。当第二次进入某个格子的时候,物品不会刷新,即不会捡起上次在这个格子丢掉的物品,也不会再次捡到初始时的物品。

当喷火走到含有敌人的格子的时候,他会与敌人进行战斗,他的战斗力很强悍,只需要有足够的子弹即可消灭敌人。每个敌人有两个参数 a,ba,b,代表需要消耗 aa 发主武器子弹,若主武器子弹不够,则不消耗主武器子弹,而消耗 bb 发副武器子弹。若主副武器均没有足够子弹,则喷火被敌人反杀,然后敌人会在喷火的盒子上做蹲起嘲讽他。

每个格子的敌人只会出现一次。如果第二次进入某一个有敌人的格子,则什么都不会发生。

现在,喷火跳在了第一行第一列的格子上,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。

输入格式

第一行有四个整数,依次表示地图行数 nn,列数 mm,背包容量 kk,和 sltheen 会下达的指令条数 tt
接下来的 n×mn\times m 行中,第 ii 行代表第 i1n+1\lfloor\frac{i - 1}{n}\rfloor+1 行,第 (i1)%n+1(i - 1)\%n+1 列的地图情况,其中 i%ni \% n 表示 ii 除以 nn 的余数:

  • 此处若是物资,则本行有两个空格隔开的整数,为物资编号 xx 和物资数量 yy,物资编号见「题目描述」中表格的最后一列(如果该物资是枪,则保证 y=1y = 1);
  • 若此处是敌人,则本行有三个空格隔开的整数,第一个整数为 1717,代表敌人,接下来两个整数依次表示敌人的 a,ba, b 两个参数。

接下来 tt 行,每行一个整数 opop,表示 sltheen 为喷火下达的指令的移动方向:1 代表向上,2 代表向下,3 代表向左,4 代表向右。(第一行第一列是地图的左上角,最后一行第一列是地图的左下角)

输出格式

如果喷火死亡,则输出两个数 u,vu, v,代表喷火在第 uu 行第 vv 列死亡。

若喷火未死亡,先输出两行,第一行为主武器编号,第二行为副武器编号,之后输出若干行,每行为两个整数整数,中间用空格隔开,第一个整数为物资名称,第二个整数为其数量,按照最后捡到时间从早到晚排序。

3 3 60 8
1 1
14 300
15 30
5 1
10 1
17 11 10
17 10 10
17 10 10
15 10
4
4
2
3
3
2
4
4

1
0
14 254
10 1
15 12

提示

数据规模与约定

对于全部的测试点,保证:

  • 1n,m1001 \leq n, m \leq 100,且 1n×m1001 \leq n \times m \leq 100
  • 1k5001 \leq k \leq 5001t,a,b2001 \leq t,a,b \leq 200
  • 1x161 \leq x \leq 161y50001 \leq y \leq 5000
  • 1op41 \leq op \leq 4
  • 数据保证每个格子内只有一种物资(或一个敌人),且背包能够装下任意一格的物资。