特殊的平原
描述
在Starcraft某个古怪的薇操地图中,你被要求在一个狭窄的高地上用1个marine来打败2只zergling。由于你认为这是不可能完成的任务,你打算编程验证这一点。
为了方便处理,你抽象出了这样一个模型:
作为战场的狭窄高低可以认为是一个5*5的方格阵,每个方格可能是“可通过”和“不可通过”两种情况。marine和zergling总是占据其中的一个可通过方格。两个zergling可以处于同一方格,但任意时刻,marine不能任一未死亡的zergling处于同一方格。marine和zergling均拥有生命值(HP),marine的初始生命值为m,所有zerglint的初始生命值均为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个回合但仍未胜利则认为游戏失败。
你需要判定游戏是否可能取得胜利,如果可能,输出取得胜利的最少回合数。
格式
输入格式
输入文件的前5行有5个字符,表示战场每个方格的情况。
字符“1”表示对应方格不可通过,其他字符表示对应方格可通过。大写字母“M”表示marine初始位置,大小写字母“Z”和“z”表示两只zergling的初始位置。
输入文件的第6行有两个整数m、z,分别表示marine的初始生命值和zergling的初始生命值。1≦m≦16,1≦z≦99。
输出格式
如果游戏可以取得胜利,输出一行“WIN”,并在第二行输出一个整数,表示取得胜利需要的最少回合数。否则输出一行“LOSE”。
样例1
样例输入1
zZ000
11110
00M10
01110
00000
15 15
样例输出1
WIN
30
限制
1 second
来源
LIU, Ichou
北京市2005年培训冬令营考题
青少年信息学奥林匹克竞赛培训教材·数据结构与算法设计