QOJ.ac

QOJ

Time Limit: 1 s Memory Limit: 512 MB

# 5195. 群星连结

统计

题目背景

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

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

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

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

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

提示

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

题目描述

基础参数

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

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

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

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

游戏开始时,生命值 $hp$ 等于最大生命值 $HP$,能量值 $mp$ 、攻击力增益 $\Delta_{atk}$、防御力增益 $\Delta_{def}$ 均等于 $0$。

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

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

死亡判定

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

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

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

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

参数溢出

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

在游戏过程的任意时刻,如果某个角色的生命值 $mp>MP$,则 $mp$ 会立刻变成为 $MP$。

优先目标

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

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

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

普通攻击

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

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

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

天赋

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

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

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

技能

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

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

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

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

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

生命回复与能量回复

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

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

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

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

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

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

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

生命值扣除环节

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

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

假设其受到 $x$ 点伤害和 $y$ 点真实伤害,那么:

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

游戏过程

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

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

己方行动期间,

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

己方行动结束。

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

输入格式

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

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

在这$4$行中:

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

接下来 $4n$ 行描述 Bob 的 $n$ 个角色,形式同上。

输出格式

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

  • 第 $1$ 行,输出一个正整数 $x$,表示游戏在第 $x$ 个回合结束的。
  • 第 $2$ 行,输出一个字符串(AliceBob)表示胜者。
  • 第 $3$ 行,输出 $n$ 个非负整数,依次表示胜者的每一个角色在游戏结束时的 $hp$,若该角色已死亡则输出 $0$。

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

样例数据

样例 1 输入

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

样例 1 输出

15
Alice
2 0 96

数据范围及约定

$n \le 10;HP,MP,atk \gt 0;def \ge 0$。

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

保证游戏在 $23333$ 回合内结束。