#P7610. [THUPC2021] 群星连结

[THUPC2021] 群星连结

题目背景

众所周知,群星和公主连结联动啦!联动的结果是一个叫做群星连结的游戏。

这是一个双人回合制竞赛游戏,双方记为 Alice 和 Bob。游戏有若干回合,每个回合依次由先手和后手分别行动一次。

现在聪明的你写了一个优秀的 AI 来玩这个游戏,这个 AI 会遵从游戏规则,并且按照游戏过程条目里既定的策略进行游戏。但是由于您太强了,所以世界上只有这么一个 AI,所以只能自己和自己打。

现在给定这个游戏的初始局面,让这个 AI 分别作为 Alice 和 Bob 对战,其中 Alice 先手。你需要模拟游戏过程,并且判断最终是 Alice 获胜还是 Bob 获胜。

游戏初始局面会通过输入给出。

【提示】

本题中,伤害真实伤害生命值扣除是三个不同的概念,请注意区分。

题目描述

基础参数

首先,在游戏开始之前,每个玩家需要选择恰好 nn 个角色,并编号 1,2,3,,n1,2,3,\dots,n

每个角色都有一些基础参数:

  1. HP,hpHP,hp :最大生命值,生命值;
  2. MP,mpMP,mp:最大能量值,能量值;
  3. atk,Δatkatk,\Delta_{atk}:基础攻击力,攻击力增益;
  4. def,Δdefdef,\Delta_{def}:基础防御力,防御力增益;

另外,为方便起见,下文中记 A=max(atk+Δatk,1)A=\max(atk+\Delta_{atk},1)D=max(def+Δdef,0)D=\max(def+\Delta_{def},0)

游戏开始时,生命值 hphp 等于最大生命值 HPHP,能量值 mpmp、攻击力增益 Δatk\Delta_{atk}、防御力增益 Δdef\Delta_{def} 均等于 00

HP,MP,atk,defHP,MP,atk,def 将由输入给出。

除此之外,每个角色分别拥有一个天赋和一个技能,分别见天赋条目和技能条目。

死亡判定

游戏过程的任意时刻,如果某个角色生命值 hphp 降到 00 以下,则判定该角色【死亡】。

一个角色一旦被判定为【死亡】,则该角色将从场上完全退出,并且生命值被恒定为 00,不能通过任何方式回复生命值(即不能起死回生,即使拥有【天赋 — 心胜于物】;另外,也不能通过己方其它角色技能回复生命值),不能普通攻击、发动技能,也不能被选定为优先目标,因而不能被普通攻击。

总之就是不以任何形式参与后续游戏的进程,并且本题中所有“全体”、“所有角色”等词均不包含【死亡】角色。

当某方角色全部被判定【死亡】时,游戏立刻结束,并判定另一方胜利(若此时仍有尚未完成的结算,也全部不再进行)。

参数溢出

在游戏过程的任意时刻,如果某个角色的生命值 hp>HPhp>HP,则 hphp 会立刻变成为 HPHP

在游戏过程的任意时刻,如果某个角色的能量值 mp>MPmp>MP,则 mpmp 会立刻变成为 MPMP

优先目标

游戏开始前,每个玩家需要为每个角色选定一个攻击顺序。

具体来说,对编号为 ii 的角色,需要确定一个攻击顺序 pi,1,,pi,np_{i,1},\ldots,p_{i,n},满足 pi,1,,pi,np_{i,1},\ldots,p_{i,n} 是一个关于 1,,n1,\ldots,n 的排列。

游戏过程的任意时刻,称编号为 ii 的优先目标是 pi,jp_{i,j},当且仅当 pi,1,,pi,j1p_{i,1},\ldots,p_{i,j-1} 全部【死亡】,并且 pi,jp_{i,j} 没有【死亡】。

普通攻击

普通攻击会对优先目标造成 AA 点伤害。

拥有【天赋 — 超凡入圣】的角色则会对优先目标造成 AA 点真实伤害。详见天赋条目。

拥有【天赋 — 星河力量投射】的角色普通攻击会附加真实伤害。详见天赋条目。

天赋

天赋有以下几种类型(每行前的编号为天赋类型的编号,圆括弧 () 内部为附加参数):

  1. 【天赋 — 我自闭了】该角色的天赋毫无作用;
  2. 【天赋 — 血肉皮囊】该角色免疫一半真实伤害。详情见生命值扣除环节条目。
    真实伤害见生命值扣除条目
  3. 【天赋 — 星河力量投射】(x)(x) 该角色每次普通攻击会附加的 xx 点真实伤害;
  4. 【天赋 — 心胜于物】(x,y)(x,y) 该角色每次己方行动结束后回复 xx 点生命值,并额外回复 yy 点能量值;
  5. 【天赋 — 超凡入圣】该角色的普通攻击被视为真实伤害攻击,即该角色的普通攻击不造成伤害,但造成 AA 点真实伤害。
  6. 【天赋 — 科技至上】(x,y)(x,y) 该角色每次进行普通攻击后,回复 xx 点生命值;该角色每次发动技能后,额外回复 yy 点能量值。注意:如果普通攻击或发动技能造成对方全部角色【死亡】,则该角色不再回复生命值或能量值。

本题保证天赋附加参数均为整数(但在输入数据中可能会有 00,详情参见输入格式条目)。

技能

当某个角色能量值等于其最大能量值时(并且在游戏过程中被选定为发动技能的角色),可以清零其能量值并发动一次技能。

技能有以下几种类型(每行前的编号为技能类型的编号,圆括弧 () 内部为附加参数):

  1. 【技能:心态崩了!】该角色的主动技能毫无作用。注意,该技能仍然可以被发动,只不过毫无效果而已。
  2. 【技能:格林炸裂!】(x)(x) 对敌方所有角色造成 xx 点伤害,然后使敌方所有角色能量值减少 mpenemy10\left\lfloor\frac{mp_{enemy}}{10}\right\rfloor,其中 mpenemymp_{enemy} 为敌方该角色能量值(即对于每个敌方角色,若其当前的能量值为 mpenemymp_{enemy},那么受此技能影响,其能量值会变成 $mp_{enemy}-\left\lfloor\frac{mp_{enemy}}{10}\right\rfloor$)。注意,根据规则,敌方角色会先受到伤害而进入生命值扣除环节,在该环节中回复能量值,然后再被该技能扣除能量值。
  3. 【技能:日 (zhou) 昇 (ji) 之 (dao) 雨 (dan)!】对敌方所有角色造成 AA 点真实伤害。
  4. 【技能:天楼霸断剑!】(x)(x) 对敌方所有目标造成 $\min\left(\left\lfloor\frac{HP_{enemy}}{10}\right\rfloor,x\times A\right)$ 点伤害,其中 HPenemyHP_{enemy} 为被攻击目标的最大生命值。
  5. 【技能:演出开始!】(x,y)(x,y) 设当前为第 tt 回合,则从发动技能开始,到第 t+x1t+x-1 回合结束期间,在己方行动结束时,己方全体角色额外回复 yy 点能量值。
  6. 【技能:天狼噬斩!】(x)(x) 将优先目标的防御力增益减小 xx然后对优先目标造成 AA 点真实伤害。
  7. 【技能:地 (太) 球 (虚) 蓝 (苍) 色 (蓝) 闪 (闪) 电!】(x,y)(x,y) 对优先目标造成 AA 点真实伤害。另外,设当前为第 tt 回合,则从发动技能开始,到第 t+x1t+x-1 回合结束期间,敌方所有角色攻击力增益减小 yy
  8. 【技能:极光绽放!】(x,y,z)(x,y,z) 使己方未【死亡】角色生命值最低(如有多个,则编号最小)的恰好一名角色回复 zz 点生命值。另外,设当前为第 tt 回合,则从发动技能开始到第 t+x1t+x-1 回合结束期间,己方所有角色攻击力增益增大 yy
  9. 【技能:流星!】(x,y)(x,y) 对敌方所有角色造成 AA 点伤害。设当前为第 tt 回合,则从该技能造成伤害后,到第 t+x1t+x-1 回合结束期间,使敌方所有角色防御力增益减小 yy。注意,本技能先造成伤害,再产生减益。
  10. 【技能:精灵庇护!】(x,y,z)(x,y,z) 己方全体角色回复 zz 点生命值。设当前为第 tt 回合,则从发动技能开始,到第 t+x1t+x-1 回合结束期间,己方所有角色防御力增益增大 yy
  11. 【技能:全力超全开!轮回之终末!】(x)(x) 己方所有角色基础攻击力 atkatk、基础防御力 defdef 变为原先的两倍 2×atk,2×def2\times atk, 2\times def;未【死亡】角色生命值 hphp 变为 $\max\left(\left\lfloor\frac{HP}2\right\rfloor,hp\right)$,能量值 mpmp 变为 $\max\left(\left\lfloor\frac{MP}2\right\rfloor,mp\right)$;设当前为第 tt 回合,则从发动技能开始,到第 t+x1t+x-1 回合结束期间,己方行动结束时,己方所有角色额外回复 11 点能量值。在第 t+x1t+x-1 回合结束时,若敌方仍有角色未【死亡】,则己方全体角色强制生命值清零,并被判定为【死亡】。另外,在发动该技能时,场上所有拥有这个技能的角色(包括自己)的技能将被强制替换为 0 号【技能:心态崩了!】(因此该技能最多在游戏中被发动一次)。

本题保证技能附加参数均为整数(但在输入数据中可能会有 00,详情参见输入条目)。

注意:上述形如“设当前为第 tt 回合,则从发动技能开始到第 t+x1t+x-1 回合结束期间,……”产生的效果是可以叠加的。

生命回复与能量回复

生命值仅可通过天赋和技能回复。

己方行动结束时,己方全体角色能量值增加 11。拥有【天赋 — 心胜于物】的角色,以及受【技能:演出开始!】和【技能:全力超全开!轮回之终末!】影响的角色可以额外回复能量值。

当己方角色进行普通攻击或者发动技能后,该角色能量值增加 11。拥有【天赋 — 科技至上】的角色发动技能后会回复额外的能量值。

注意,发动技能时,先扣除全部能量值,再发动技能,然后再增加能量值。

特别的,若该技能为【技能:全力超全开!轮回之终末!】,则使发动该技能的角色 $mp=\max\left(mp,\left\lfloor\frac{MP}2\right\rfloor\right)$ 后再增加能量值。

当己方角色因受到伤害而进入生命值扣除环节时,该角色能量值增加 11(无论其是否实际扣除生命值)。

生命值扣除见生命值扣除环节。

生命值扣除环节

当角色受到伤害或者真实伤害时,该角色立即进入生命值扣除环节(注意,即使受到了 00 点伤害,也会进入生命值扣除环节)。

进入生命值扣除环节后,由能量回复条目,该角色能量值增加 11

假设其受到 xx 点伤害和 yy 点真实伤害,那么:

  • 若该角色因拥有【天赋—血肉皮囊】而免疫一半真实伤害,则其生命值扣除 max(xD,0)+yy2\max(x-D,0)+y-\left\lfloor\frac y2\right\rfloor
  • 否则,其生命值扣除 max(xD,0)+y\max(x-D,0)+y

游戏过程

游戏开始后,可视为若干回合,编号从 11 开始。

每个回合,可以划分为如下 55 个阶段:Alice 行动(期间)、Alice 行动结束、Bob 行动(期间)、Bob 行动结束、当前回合结束。

己方行动期间,

  1. 如果己方存在至少一个角色可以发动技能时,则按照技能编号从大到小的顺序选择其中一位发动技能。如果有多个角色满足可以发动相同编号的技能,则选择这些角色中角色编号最大的角色发动技能。
  2. 如果己方没有角色可以发动技能,则选择一个优先目标生命值最高的角色发动普通攻击。如果有多个角色的优先目标生命值最高,则选择能对优先目标扣除更多生命值(而不是造成更多伤害!)的角色发动攻击。如果仍然有多个角色可以选择,则选择其中编号最大的角色发动普通攻击。

己方行动结束。

注意,己方行动期间,仅能选择一位角色发动技能,或者选择一位角色进行普通攻击。

输入格式

第一行一个正整数 nn,表示 AliceBob 分别有 nn 个角色。

接下来 4n4 n 行,第 4i34 i - 3 到第 4i4 i 行描述 Alice 的编号为 ii 的角色。

在这四行中:

  • 第一行,四个非负整数 HP,MP,atk,defHP,MP,atk,def 分别表示该角色的最大生命值、最大能量值、基础攻击力、基础防御力,保证 HP,MP>0HP,MP>0
  • 第二行,nn 个正整数 pi,1,pi,2,,pi,np_{i,1},p_{i,2}, \ldots ,p_{i,n},表示该角色攻击顺序,保证这是一个关于 11nn 的排列。
  • 第三行,三个非负整数 tf,x,ytf,x,y 表示天赋编号以及附加参数。如果该天赋附加参数不足两个,那么你可以忽略多余的部分(保证此时多余的部分在输入数据中是 00)。
  • 第四行,四个非负整数 jn,x,y,zjn,x,y,z 表示技能编号及附加参数。如果该技能附加参数不足三个,那么你可以忽略多余的部分(保证此时多余的部分在输入数据中是 00)。

接下来 4n4n 行描述 Bobnn 个角色,形式同上。

输出格式

如果游戏能够以某一方胜利而结束,那么:

  • 第一行,输出一个正整数 xx,表示游戏在第 xx 个回合结束的。
  • 第二行,输出一个字符串(AliceBob)表示胜者。
  • 第三行,输出 nn 个非负整数,依次表示胜者的每一个角色在游戏结束时的 hphp,若该角色已死亡则输出 00

如果游戏永远不会结束或者双方平局,请输出任意卖萌表情。

3
2 8 1 1
1 2 3
3 1 1
7 2 1 2
6 6 3 0
1 2 3
5 1 1
7 2 1 1
99 10 1 1
2 1 3
1 0 0
10 10 0 0
9 10 1 0
1 2 3
2 1 0
8 2 1 0
8 7 2 1
2 1 3
1 0 0
4 2 1 0
99 10 2 0
2 1 3
1 0 0
10 10 0 0

15
Alice
2 0 96 

提示

【数据范围】

n10n \le 10HP,MP,atk>0HP, MP, atk \gt 0def0def \ge 0

保证在游戏中的任意时刻,所有题面中提及到的参数及表达式的绝对值均不超过 109{10}^9

保证游戏在 2333323333 回合内结束。

【题目来源】

来自 2021 清华大学学生程序设计竞赛暨高校邀请赛(THUPC2021)。

题解等资源可在 https://github.com/yylidiw/thupc_2/tree/master 查看。