1517 : 赛博朋克 2077:荒坂神舆的终极崩坏
题目描述Description
题目背景

你正在骇入由 N 个线性安全节点组成的荒坂塔核心服务器。作为顶尖黑客,你需要利用有限的系统资源(生命值与内存),在强制下载机密数据的同时,应对环境协议的侵蚀与系统过载的威胁。
核心实体与基础公理
在模拟开始前,系统初始化主角 V 的核心属性与义体。
【基础公理:生命值溢出阻断】
在模拟的任何时刻(包括结算中途),只要 HP
的数值增加,或 MaxHP
的数值改变,系统必须立刻强制执行约束:HP
\leftarrow \min(HP, MaxHP)。
MaxHP(最大生命值): 初始值为 H_0。决定 V 的生命上限及惩罚基数, 若在任何时刻 MaxHP \le 0,V 立刻被判定为脑死(FLATLINE)。
HP(当前生命值): 初始值为 H_0, 承受伤害的计量槽。
RAM(接入仓内存): 初始值为 RAM_0, 用于存放数据。该数值允许在计算过程中暂时为负数,但会受【阶段三】的严格管控。
HEAT(义体热量): 初始值为 0, 衡量系统负荷的计量槽,最低不可小于 0。该数值受【全局中断机制】实时监听。
Kerenzikov(义体-克伦齐科夫): 初始拥有 1 次充能, 仅在【阶段四】触发。
Biomonitor(义体-生物监测): 初始拥有 3 次充能, 仅在【阶段四】触发。
全局中断机制:系统过载 (Overheat)
在处理整个模拟流程时,系统实时监听 HEAT
的数值。
一旦满足触发条件,立刻挂起当前正在执行的任何操作(哪怕该操作处于某个阶段的运算中途),优先执行过载逻辑。
触发条件: HEAT \ge 100。
执行逻辑: 当触发条件满足时,持续循环执行以下 4 步,直到 HEAT < 100 或触发脑死:
神经受损:MaxHP 永久扣除 \max(1, \lfloor MaxHP / 10 \rfloor) 点。
溢出阻断:触发【基础公理】,即 HP \leftarrow \min(HP, MaxHP)。
脑死判定:若此时 MaxHP \le 0,V 彻底脑死(FLATLINE),程序立刻终止。
热量释放:HEAT 减去 100。
(注:中断处理完毕且 V 未脑死后,系统恢复刚才被挂起的操作继续执行。)
节点结算流程
服务器由 N 个节点组成,初始子网协议类型 Subnet = 0。
对于第 i 个节点(i 从 1 到 N),必须严格按照以下四个阶段按序执行。如果在任何阶段 V 被判定脑死,立即终止所有操作,并输出当前节点编号 i。
阶段一:环境侵蚀
读取当前的 Subnet 状态,执行环境结算:
若 Subnet = 1 (酸性): HP 减去 5。(此伤害即使导致 HP \le 0 也必须硬抗至【阶段四】才可使用义体救场)。
若 Subnet = 2 (超频): HEAT 增加 10。(可能会立刻触发【系统过载】中断)。
若 Subnet = 0 (常规): 无事发生。
阶段二:节点事件交互
读取当前节点的输入数据 Type 和 Val,执行对应事件:
Type 1 (遭遇黑冰): HP 减去 Val。
Type 2 (遭遇骇客): HEAT 增加 Val。(若触发过载中断,等待中断完毕且 V 存活后继续)。随后,若此时 RAM > 0,骇客将烧毁剩余内存:RAM 减去 \lfloor RAM \times 0.1 \rfloor。
Type 3 (数据下载): 发现机密数据。系统强制将其载入背包,RAM 减去 Val。(背包需记录该数据包的初始大小 Val)。
Type 4 (冷却补给): HP 增加 Val(受基础公理约束)。随后 HEAT 减去 \lfloor Val / 2 \rfloor(若结果小于 0 则设为 0)。
Type 5 (协议篡改): 将全局 Subnet 的值变更为 Val。此更改对当前节点不再生效,自下一个节点(i+1)的阶段一始效。
阶段三:内存溢出管控
检查阶段二执行完毕后的 RAM 值。
若 RAM < 0,必须执行【内存倾印】循环,直到 RAM \ge 0:
定位: 遍历背包中所有已下载的数据,找到初始大小(Val)最大的那一个。若有多个最大值,任选其一。
粉碎: 将该数据从背包中永久删除,并将其占用的 Val 原数退还(即 RAM 加上 Val)。
碎片发热: 粉碎操作产生冗余代码,HEAT 增加 (Val \pmod{10}) + 5。(此操作可能立刻触发【系统过载】中断)。
阶段四:生存状态极验
在当前节点上述所有逻辑执行完毕后,结算义体判定(必须严格按 1、2 顺序执行):
- 致命伤判定:
若 HP \le 0 且拥有
Kerenzikov充能(> 0):充能数减 1,HP 强制设定为 1。若 HP \le 0 且无充能:V 彻底脑死(FLATLINE),程序终止。
- 濒死救援判定:
- 完成上述判定后,若 HP > 0 且
HP < \lfloor MaxHP \times 0.3
\rfloor,且拥有
Biomonitor充能(> 0):充能数减 1,HP 增加 \lfloor MaxHP \times 0.5 \rfloor(受基础公理约束)。
输入格式Input
第一行包含一个整数 T(1 \le T \le 10),表示测试用例的数量。
每组测试用例第一行包含三个整数 N, H_0, RAM_0:
1 \le N \le 10^5
1 \le H_0 \le 10^9
0 \le RAM_0 \le 10^9
接下来 N 行,每行两个整数 Type 和 Val:
1 \le Type \le 5
当 Type = 5 时,0 \le Val \le 2
否则,1 \le Val \le 10^9
保证所有测试用例的 N 之和不超过 2 \times 10^5。
输出格式Output
对于每组测试用例,输出一行结果:
若中途脑死:
FLATLINED at X(X 为导致脑死或被判定脑死时的节点编号,从 1 开始计)。若成功通关:
MIKOSHI_REACHED P HP MaxHP(P 为最终保留的神舆数据包数量,后跟最终的 HP 和 MaxHP)。
样例Sample
提示Hint
样例说明
初始状态:MaxHP=100, HP=100,
RAM=50, HEAT=0, Subnet=0。
节点 1:
Type=3下载数据 40。RAM变为 10。背包为[40]。节点 2:
Type=5篡改协议为 2。当前节点无影响。节点 3:
阶段一:
Subnet=2生效,HEAT增加 10。阶段二:
Type=3下载数据 30。RAM变为 -20。背包为[40, 30]。阶段三:
RAM < 0,粉碎背包内最大数据 40。RAM恢复为 20。HEAT增加 (40 \pmod{10}) + 5 = 5。此时HEAT=15。背包剩余[30]。
- 节点 4:
阶段一:
HEAT增加 10,变为 25。阶段二:
Type=2遭遇骇客,HEAT增加 80,变为 105。全局中断触发: 105 \ge 100。
MaxHP减去 \max(1, \lfloor 100/10 \rfloor) = 10,变为 90。触发公理,HP被压低至 90。HEAT减去 100 变为 5。中断返回:
RAM此时为 20 (> 0),烧毁 \lfloor 20 \times 0.1 \rfloor = 2。RAM变为 18。
- 节点 5:
阶段一:
HEAT增加 10,变为 15。阶段二:
Type=3下载数据 80。RAM变为 -62。背包为[30, 80]。阶段三:粉碎数据 80。
RAM恢复为 18。HEAT增加 (80 \pmod{10}) + 5 = 5,变为 20。背包剩余[30]。
节点 6:
阶段一:
HEAT增加 10,变为 30。阶段二:
Type=1遭遇黑冰 150,HP变为 -60。阶段四:
致命伤: HP \le 0,消耗
Kerenzikov,HP强制变为 1。濒死救援: HP > 0 且 1 < \lfloor 90 \times 0.3 \rfloor (即 27)。满足条件,消耗
Biomonitor,HP$ 增加 $\lfloor 90 \times 0.5 \rfloor = 45$。最终HP` 为 46。最终通关,背包仅余 1 个数据包 (30)。输出
MIKOSHI_REACHED 1 46 90。
数据范围
测试用例数量 (T):1 \le T \le 50
单组节点数量 (N):1 \le N \le 10^5
节点总数限制 (\sum N):所有测试用例的 N 之和不超过 2 \times 10^5
初始最大生命值 (H_0):1 \le H_0 \le 10^9
初始内存 (\mathrm{RAM}_0):0 \le \mathrm{RAM}_0 \le 10^9
事件类型 (\mathrm{Type}):1 \le \mathrm{Type} \le 5
事件数值 (\mathrm{Val}):
当 \mathrm{Type} = 5(协议篡改)时:0 \le \mathrm{Val} \le 2
其他情况:1 \le \mathrm{Val} \le 10^9
出题Author
szzk
来源Source
深圳技术大学第六届程序设计竞赛