1 marine VS 2 zergling

1 marine VS 2 zergling

测试数据来自 system/1766

背景

在Starcraft某个古怪的操作地图中,你被要求在一个狭窄的高低上用一个marine来打败两只zergling。由于你认为这是不可能完成的任务,你打算编程验证这一点。

描述

为了方便处理,你抽象出了这样一个模型:
作为战场的狭窄高地可以认为是一个5×5的方格阵,每个方格可能是“可通过”或“不可通过”两种情况。marine和zergling总是占据其中一个可通过方格。两个zergling可以处于同一方格,但在任一时刻marine不能和任一未死亡的zergling处于同一方格。marine和zergling均拥有生命值(HP),marine的初始生命值为m,所有zergling的初始生命值为z。

游戏可以抽象为回合制。在每个回合中,marine首先行动。marine可以选择沿竖直或水平方向移动一格,或站在原地朝某只zergling开枪(由于高地非常狭窄,marine可以击中处于高地任何位置的zergling)。marine的每一枪会减少目标zergling的生命值1点,当一只zergling的生命值降低到0点或以下时会死亡。

marine行动完毕后,所有尚未死亡的zergling会同时行动。如果某只zergling和marine相邻,他会攻击marine,否则他会沿着自己当前位置到marine的最短路前进一格。如果有多条最短路,zergling会按左、上、右、下的顺序依次尝试行动(例如如果左、上都是最短路,zergling会向左走)。如果两只zergling在同一格攻击marine,marine的生命值只会减少1点,否则每只zergling的攻击都会使marine的生命值减少1点。

当某个回合结束时,若zergling全部死亡则认为游戏胜利,若marine生命值降低到0点或以下,或者游戏进行了34个回合但仍未胜利则认为游戏失败。

你需要判定游戏是否可能取得胜利,如果可能,输出取得胜利需要的最少回合数。

格式

输入格式

输入文件共6行。

输入文件的前5行每行有5个字符,表示战场每个方格的情况。

字符只可能出现“M”,“Z”,“z”,“1”,“0”
字符“1”表示对应方格,其他字符表示对应方格可通过。大写字母“M”表示marine的初始位置,大写字母“Z”和小写字母“z”表示两只zergling的初始位置。

输入文件的第6行有两个正整数m,z(1≤m≤16,1≤z≤99),分别表示marine的初始生命值和zergling的初始生命值。

注:战场地图可能出现由“1”围出的封闭区域

输出格式

如果游戏可以取得胜利,输出一行“WIN”,并在第二行输出一个整数,表示取得胜利需要的最少回合数
如果游戏不可能取得胜利,只输出一行“LOSE”。

样例1

样例输入1

zZ000
11110
00M10
01110
00000
15 15

样例输出1

WIN
30

限制

共5个测试点,每个测试点1s

提示

样例解释:marine只需在原地对两只zergling不断攻击即可胜利
注:所有的输入文件和输出文件文末都有回车

信息

ID
1808
难度
(无)
分类
动态规划 点击显示
标签
(无)
递交数
0
已通过
0
通过率
?
上传者