Final Combat
题目描述
本题是2007年度最佳RPG游戏之一——《仙剑奇侠传四》中最后一战的简化版。你的任务和原作一样,是用 4 个主人公打败玄霄(XX)和夙瑶(SY),阻止琼华派飞升。
游戏的主角有 4 个:云天河(YTH),韩菱纱(HLS),柳梦璃(LML)和慕容紫英(MRZY)。战斗开始前,你需要恰好选 3 人上场,并且按照某种顺序排列。令排序后的 3 个主角分别为 $H1$、$H2$ 和 $H3$。和游戏中一样,这一战只需打败夙瑶即可。尽管在游戏中,玄霄也是可以打败的,但在本题中,请假设玄霄拥有不死之身。
![114514](https://cdn.luogu.com.cn/upload/image_hosting/rmjywblj.png)
如上图所示是一张战斗截图,其中 $H1$ 是 YTH,$H2$ 是 HLS,$H3$ 是 LML。战斗采用半回合制,即战斗双方的每个人都有一个头像在“进度条”上从左到右移动,只有当头像移到最右端,则行动的优先级从高到低依次为 YTH、HLS、LML、MRZY、XX 和 SY。当有角色在行动时,所有头像停止移动。至其行动完毕后,该角色的头像重新开始从进度条左端点向右移动。没有角色行动时,所有头像同时向右移动(但速度不一定相同)。
在本题中,每个角色有 4 个基本属性:精、气、神、速。
- 精:生命力。当精的数值 $\leq 0$ 时,该角色死亡。每个角色都有一个精的上限,用 $maxjing$ 表示。
- 气:用来进行特殊技攻击。当气不够时,某些特殊技无法使用。每个角色的气上线总是 $100$。
- 神:用来催动仙术。当神不够时,某些仙术将无法使用。每个角色都有一个神上线,用 $maxshen$ 表示。
- 速:决定该角色头像在进度条上的移动速度。速总是 1~4 的整数。若一个角色的速 $=x$,则它的头像恰好需要 $5-x$ 个单位时间从进度条的最左端移到最右端。一个角色的速用 $su$ 表示(在本题中,每个角色的速是不变的)。
为简单起见,本题假设玄霄和夙瑶采用如下的简单攻击策略:
- 在ta的第 $4n+1$ 次 $(n=0,1,2...)$ 行动中,对 $H1$ 进行武器攻击。
- 在ta的第 $4n+2$ 次 $(n=0,1,2...)$ 行动中,对 $H2$ 进行武器攻击。
- 在ta的第 $4n+3$ 次 $(n=0,1,2...)$ 行动中,对 $H3$ 进行武器攻击。
- 在ta的第 $4n+4$ 次 $(n=0,1,2...)$ 行动中,对 $H1$、$H2$、$H3$ 全体进行特殊技攻击。
每个主角都用 4 个属性来描述玄霄和夙瑶对自己的伤害: $d1x$ 和 $d2x$ 表示玄霄的武器攻击和特殊技攻击对自己的伤害,而 $d1s$ 和 $d2s$ 表示夙瑶的武器攻击和特殊技攻击对自己的伤害。
作为一个剧情派玩家,你不想过多的斟酌战斗策略,因此在一名主角需要行动时,你只会考虑以下 4 中可能:
- 用武器攻击玄霄或夙瑶其中一人。注意,夙瑶已经使用了九幽猝寒剑护体,因此,如果对她进行武器攻击,攻击者将被反弹至伤,因反弹所受的伤害值等于夙瑶遭受的伤害值,用 $wad$ 表示。用武器攻击玄霄(如果你愿意),则不会被反弹。
- 用仙术“雨润”恢复自己的精。使用一次雨润,将消耗 $yurun\_shen$ 个单位的神,增加 $yurun\_jing$ 个单位的精(若超过 $maxjing$ 则精将变回 $maxjing$)
- 用道具“鼠儿果”恢复自己的神(假设你的鼠儿果有无穷多)。每次只能使用一个鼠儿果,将增加 $shuerguo\_shen$ 个单位的神(若超过 $maxshen$ 则神将变回 $maxshen$)
- 进行特殊技攻击。每名主角恰好会一种特殊技,同时攻击夙瑶和玄霄。注意:有些特殊技也是物理攻击(这些特殊技用 $ssp=1$ 表示,其它特殊技满足 $ssp=0$),因此也会被夙瑶反弹至伤,因反弹所受的伤害值等于夙瑶遭受的伤害值,用 $ssd$ 表示。特殊技需要的气用 $ssq$ 表示。
你可能已经注意到,仙术和道具都无法回复气。事实上,只有两种方法可以攒气:使用武器攻击或者被武器攻击打中。使用特殊技攻击、被特殊技打中或被反弹致伤时,气不会增加。每次进行武器攻击时,气将增加 $q1$;每次被武器攻击打中时,气将增加 $q2$(如果气超过 $100$,将变回 $100$)。
你是一个完美主义者,因此你不希望战斗中有任何一位主角死亡,哪怕是暂时的。特别是打败夙瑶是,不能让主角与她同归于尽。你的任务是精密计划每个角色的每次行动,使得在上述前提之下,用尽可能短的时间(只计算头像移动时间,不算行动时间)打败夙瑶。
**输入格式**
输入包括不超过 100 组数据,每组数据的第一行为 6 个正整数,分别是 $SY\_jing,XX\_su,SY\_su,yurun\_jing,yurun\_shen,shuerguo\_shen$。
接下来的 4 行分别是描述 YTH,HLS,LML 和 MRZY 的属性,其中每行包括 16 个非负整数:$maxjing,maxshen,su,d1x,d2x,d1s,d2s,wad,ssd,ssq,ssp,q1,q2,jing,qi,shen$,最后三个整数表示战斗开始时的精气神值,保证合法。
输入结束标志为 `0 0 0 0 0 0` 。
**输出格式**
对于每组数据,输出最短时间和所有可能的角色顺序。每种角色顺序用 3 个字母来表示,其中每个字母代表一个角色(Y-云天河,H-韩菱纱,L-柳梦璃,M-慕容紫英)。比如,若 $H1$ 是韩菱纱,$H2$ 是柳梦璃,$H3$ 是云天河,则角色顺序用 $HLY$ 表示。所有可能的角色顺序按照字典序排列。如果无法在 12 个回合内取胜,输出 $-1$。
**数据范围**
![114514](https://cdn.luogu.com.cn/upload/image_hosting/byirepbq.png)
**翻译来自 刘汝佳,陈锋《算法竞赛入门经典-训练指南》**
[problemUrl]: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=244&page=show_problem&problem=3385
[PDF](https://uva.onlinejudge.org/external/122/p12233.pdf)
![](https://cdn.luogu.com.cn/upload/vjudge_pic/UVA12233/20bf38364f2504ee2f4807ac8b81c796c2129495.png)
输入输出格式
输入格式
![](https://cdn.luogu.com.cn/upload/vjudge_pic/UVA12233/f52b40ca88ecb0b8f3d411704bda9390aea2af56.png)
输出格式
![](https://cdn.luogu.com.cn/upload/vjudge_pic/UVA12233/91b3565460b8aed50aa8fe35c64fc14dc51bd994.png)
输入输出样例
输入样例 #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