QOJ.ac

QOJ

時間限制: 1 s 記憶體限制: 256 MB 總分: 100

#3406. 最终决战

统计

你正在玩一款角色扮演游戏(RPG),这可以说是 2007 年最好的国产 RPG。你已经打到了最终战。你想要尽快获胜。你知道我在说什么吗?

对于不熟悉该游戏的参赛者:我们很快会简要介绍战斗系统以及最后一场战斗中涉及的角色。

对于太熟悉该游戏的参赛者:我们简化和/或更改了本题的规则和事实。如果你对此感到不快,我们深表歉意。

图:最终战

上面的截图让你对战斗系统和角色有了一些了解,可以总结如下:

  • 你有 4 位英雄:云天河(YTH)、韩菱纱(HLS)、柳梦璃(LML)和慕容紫英(MRZY)。在战斗开始前,你需要选择恰好三位英雄并以某种顺序排列。我们将第 1、第 2 和第 3 位英雄分别称为 H1、H2 和 H3。在上面的截图中,H1 是 YTH,H2 是 HLS,H3 是 LML。(对紫英的粉丝们表示抱歉!)
  • 有两个 Boss:玄霄(XX)和夙瑶(SY),都在截图的后方。
  • 这场战斗的目标是击败 SY。在本题中,你可以假设 XX 是不死的,尽管在真实游戏中击败他是可能的。

本题的关键在于理解“半”回合制战斗系统。看到屏幕顶部的“进度条”了吗?每个英雄在进度条上都有一个小进度球(浅蓝色),上方有一个图标。同样,每个 Boss 也有一个球(红色),但图标在球的下方。战斗开始时,所有进度球都从进度条的左侧开始移动。当一个球到达右侧时,相应的角色就可以行动。如果超过一个角色可以行动,他们将按照以下优先级顺序依次行动:YTH、HLS、LML、MRZY、XX、SY。当一个角色正在行动时,所有进度球停止移动。角色完成动作后,他/她的进度球会重置到进度条的左侧。当没有人正在行动时,所有进度球同时向右移动(但速度可能不同,见下文)。

在本题中,每个角色有 4 个主要属性:精、气、神、速。

  • 精(Jing)意味着“生命值”。当角色的精达到零或负数时,他/她就被击败了。角色的最大精由参数 maxjing 表示。
  • 气(Qi)意味着“活力”。它用于特殊技能攻击。当气不足时,某些特殊技能攻击无法执行。角色的最大气始终为 100。
  • 神(Shen)意味着“精神”。它用于仙术(类似于魔法,但更神奇)。当神不足时,某些仙术无法执行。角色的最大神由参数 maxshen 表示。
  • 速(Su)意味着“速度”。它影响角色进度球的移动速度。速始终是一个小于 5 的正整数。如果一个角色的速为 $x$,他/她的进度球从进度条左侧移动到右侧需要 $5-x$ 个单位时间。角色的速(在战斗中从不改变)由参数 su 表示。

为简单起见,你可以假设 XX 和 SY 使用相同的策略:

  • 在他/她的第 $(4n+1)$ 次行动中($n=0,1,2,\dots$),对 H1 发起武器攻击。
  • 在他/她的第 $(4n+2)$ 次行动中($n=0,1,2,\dots$),对 H2 发起武器攻击。
  • 在他/她的第 $(4n+3)$ 次行动中($n=0,1,2,\dots$),对 H3 发起武器攻击。
  • 在他/她的第 $(4n+4)$ 次行动中($n=0,1,2,\dots$),对所有英雄发起特殊技能攻击。

现在我们为每个英雄引入另外四个参数。前两个 d1xd2x 分别是英雄在 XX 的武器攻击和特殊技能攻击中所受的伤害。对于 SY 的攻击,我们类似地定义 d1sd2s

你非常疲惫,所以不想浪费时间设计复杂的战术。当一个英雄即将行动时,你只考虑以下动作:

  • 对 XX 或 SY 发起物理武器攻击(不能同时攻击两者)。但要小心,SY 被剑阵包围(见截图),所以对她进行武器攻击会伤害攻击者自己。攻击者受到的“反弹伤害”与 SY 受到的“物理伤害”相同。攻击 XX(是的,如果你愿意,可以这样做)不会受到物理反弹伤害。
  • 使用仙术恢复精。为了简化思考,你决定不恢复其他英雄的精。在本题中,你唯一可以使用的仙术叫做“雨润”,它恢复 yurun_jing 点精(如果结果超过他/她的最大精,则减少到最大值)并消耗 yurun_shen 点神。
  • 使用物品恢复神。为了简化思考,你决定不恢复其他英雄的神。在本题中,你唯一可以使用的物品叫做“鼠儿果”,它恢复 shuerguo_shen 点神(如果结果超过他/她的最大神,则减少到最大值)。你有无限数量的鼠儿果。
  • 如果气足够,则发起特殊技能攻击。每个英雄恰好有一个特殊技能攻击,同时攻击 XX 和 SY。注意,某些特殊技能攻击是物理的。使用物理特殊技能攻击会让你受到与 SY 相同的伤害,就像武器攻击一样。

现在是时候为每个英雄引入另外四个参数:wadssdssqssp。英雄的武器攻击和特殊技能攻击对 SY 造成的精点数伤害分别由 wadssd 表示。当且仅当 ssp=1 时,特殊技能攻击是物理的(否则 ssp=0)。它需要 ssq 点气。

正如你可能已经注意到的,气不能通过仙术或物品恢复。增加气的唯一两种方法是:进行武器攻击,或被武器攻击击中。被物理反弹伤害击中不会为你增加额外的气。

所以这里是每个英雄的最后两个参数:q1q2,这意味着进行武器攻击会增加 q1 点气(无论你是否被反弹),而受到武器攻击会增加 q2 点气。如果结果超过他/她的最大气(始终为 100),则减少到最大值。同样,执行特殊技能攻击永远不会增加你的气。被 Boss 的特殊技能攻击击中也永远不会增加你的气。

作为完美主义者,你不希望任何英雄被击败,哪怕是暂时的(在真实游戏中,你可以用特定的仙术或物品复活英雄)——例如,不允许让 YTH 和 SY 同时被击败(这可能会发生,例如在 YTH 执行了强大的物理特殊技能攻击之后)。

最后的问题是:如果你采取最优策略,你能赢得战斗的最早时间(我们只关心球移动的时间,不包括进行攻击所需的时间)是多少?为了最优地进行游戏,你需要为每次行动在上述选项中做出选择。这并不像听起来那么容易。请小心!

输入格式

最多有 100 组测试数据。每组数据以 6 个正整数开头:SY_jing(SY 的初始精)、XX_su(XX 的速)、SY_su(SY 的速)、yurun_jingyurun_shenshuerguo_shen。接下来的四行包含 YTH、HLS、LML 和 MRZY 的描述,按此顺序。每行包含 16 个非负整数:maxjingmaxshensud1xd2xd1sd2swadssdssqsspq1q2jingqishen。最后三个参数是该英雄在战斗开始前的初始精、气和神值。大多数参数的范围如下:

参数 最小值 最大值
SY_jing 1 100,000
yurun_jing, maxjing, d1x, d2x, d1s, d2s 1 8,000
yurun_shen, shuerguo_shen, maxshen 1 800
XX_su, SY_su, su 1 4
wad, ssd 1 100,000
ssp 0 1
q1, q2, ssq 1 100

最后,$1 \le \text{jing} \le \text{maxjing}$,$0 \le \text{qi} \le 100$,$0 \le \text{shen} \le \text{maxshen}$。最后一组测试数据后跟着 6 个零,不应处理。

输出格式

对于每组测试数据,打印你能获胜的最早时间,以及实现该时间的所有可能的排列顺序。每种排列顺序表示为 H1、H2 和 H3 名字首字母的连接。例如,如果 H1=HLS,H2=LML,H3=YTH,则排列表示为 HLY。排列顺序应按字典序升序排列。如果你无法在 12 个单位的球移动时间内赢得战斗,则打印 -1。每组测试数据的输出后打印一个空行。

样例

输入 1

1000 1 1 200 15 75 
1000 100 1 2000 2000 2000 2000 300 800 20 0 5 5 
900 10 100 
1000 100 1 2000 2000 2000 2000 120 300 10 0 5 5 
100 80 100 
1000 100 1 2000 2000 2000 2000 100 400 30 1 5 5 
450 40 100 
1000 100 1 2000 2000 2000 2000 250 700 10 1 5 5 
600 50 100 
3000 4 1 800 15 75 
2000 100 3 2 2 2 2 1 1 1 0 2 1 1000 100 100 
2000 100 4 2 2 2 2 1 1000 25 0 2 1 1 1 100 
2000 100 1 2 2 2 2 1 1000 1 1 1 1 300 100 0 
2000 100 3 2 2 2 2 1 1000 30 0 5 1 1 6 100 
26399 3 2 3182 543 800 
4462 353 2 4300 4875 6856 5527 31497 5633 61 0 68 
63 4355 0 351 
5444 300 3 7682 1037 597 4214 6744 6861 68 0 65 12 
2136 32 143 
5875 705 2 2097 118 2366 978 14276 24850 48 0 55 
70 3562 40 277 
6413 33 1 6305 1898 340 5238 13989 25287 25 1 72 
34 3176 4 30 
0 0 0 0 0 0

输出 1

Case 1: 4 HLY HYL LHY LYH YHL YLH
Case 2: 12 HML 
Case 3: -1

说明

在第一个样例中,每个英雄行动一次后你就可以赢得战斗(在时间 4,因为所有 su 值都是 1),但你需要小心。

YTH 的特殊技能攻击很强大(伤害=900),但他的气不足(10<20)。你不能使用 HLS 的武器攻击,因为她会被物理反弹伤害击败。LML 的武器攻击很弱,但她可以使用她的特殊技能攻击,即使她会被反弹伤害(她的特殊技能攻击是物理的),因为 400<450。对于 MRZY,他的特殊技能是物理的,且太强大了,所以我们不能使用它,因为 700>600。

综上所述,我们可以使用 YTH 的武器攻击(伤害=300)、HLS 的特殊技能攻击(伤害=300)、LML 的武器攻击(伤害=100)和特殊技能攻击(伤害=400),以及 MRZY 的武器攻击(伤害=250)。不难看出,唯一能以最快方式结束战斗的组合是 YTH、HLS 和 LML(使用特殊技能攻击),顺序是任意的。注意,战斗在 SY 被击败后立即结束,所以不用担心 XX 和 SY 的可怕攻击。

在第二个样例中,YTH 太弱了,所以我们直接忽略他。你无法避免 XX 的第一次攻击,它能够击败除 LML 之外的所有人,所以 LML 似乎是唯一可能的 H1。然而,HLS 在 XX 之前行动,所以如果她在第一次行动中使用“雨润”,她也可以是 H1。不幸的是,MRZY 不能是 H1,因为他不够快,无法在 XX 攻击前恢复精。

所有的武器攻击都太弱了,所以最好的策略是先积累气,然后在可能的情况下执行强大的特殊技能攻击。LML 的 su 太低,但她的气在开始时是足够的。她所要做的就是恢复神,然后恢复精,最后进行攻击(为什么这么复杂?因为她强大的特殊技能攻击是物理的……)。注意,SY 在战斗结束前只能攻击两个英雄,所以 H3 通过反弹增加气的机会少了一次。实际上,可以证明 HLS 和 MRZY 都不能是 H3——如果是这样,他们将无法获得足够的特殊技能攻击所需的气。

综上所述,HLS 可以是 H1 或 H2,LML 可以是任何位置,而 MRZY 只能是 H1。所以唯一可能的顺序是 H1=HLS,H2=MRZY,H3=LML。

在第三个样例中,似乎你可以用 HLS 的特殊技能攻击(伤害=6861)和 LML 的特殊技能攻击(伤害=24850)击败 SY。然而,LML 需要恢复精以避免被击败,但她的初始神不足。如果我们把她的初始神改为 543(足够使用“雨润”),答案将变为 "6 LYH LYM"。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.