街机争霸
题号:NC201961
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

哎,又是银首,要是你这个签到题少WA一发就金了

牛牛战队的队员打完比赛以后又到了日常甩锅的时间。他们心情悲伤,吃完晚饭以后,大家相约到一个街机厅去solo。牛牛和牛能进入了一个迷宫,这个迷宫里除了墙壁的阻拦,还会有僵尸的阻拦。情况十分复杂,牛能为了更快的追逐牛牛,迅速放出了大招,让牛牛原地眩晕,而眩晕的解药,也只有牛能自己拥有。

这一个迷宫可以简化为一个列的矩阵,其中有一些僵尸,这些僵尸会在一个的矩形中来回游走。他不会攻击眩晕状态下的人,只会攻击和他抢地盘的人。这名队员每次移动需要一个单位时间,而且他不能穿墙,不能和僵尸处于同一位置,在追到另一名队员之前也不能停下来。

在这一场追逐战中,要么牛能追逐成功,取得胜利,要么被僵尸击败,牛牛胜利。那谁会是最终的王者呢?

输入描述:

输入数据有很多行。第一行输入4个整数,分别表示迷宫的行、列,僵尸的数量,僵尸来回走动的长度。

第2行到第行输入一个矩阵,每行输入一个字符串,第个字符串的第个字符表示矩阵中第列的状态,如果字符是#表示是可以走的路,如果是&表示是障碍物,A是被眩晕队员的位置,L是追赶者的位置。

第n+2行到第行每行输入两个整数和一个字符串,第行的数据表示第个僵尸当前时间会从第列出发,沿着固有的方向前进个单位时间后折返,再走回它之前的位置,再折返,依照这种方法循环下去。第三个字符串表示僵尸初始行进的方向,UP表示向上走,LEFT表示向左走,DOWN表示向下走,RIGHT表示向右走。数据保证在个长度内僵尸不会碰到边界或者墙壁。

输出描述:

如果牛能可以追上牛牛,输出一个整数,表示最短追上的时间。否则输出一行Oh no。
示例1

输入

复制
3 3 1 3
&&A
###
&&L
2 1 RIGHT

输出

复制
2

说明

如果用*代表僵尸的位置,则起始时状态为
&&A
*##
&&L
一个单位时间后,牛能上走,僵尸向右走,两者并没有碰上
&&A
#*L
&&#
再一个单位时间后,牛能向上走,追上牛牛,取得胜利。
&&L
##*
&&#
示例2

输入

复制
4 4 1 2
L#&A
##&#
#&##
####
3 3 DOWN

输出

复制
Oh no

说明

初始状态
L#&A
##&#
#&*#
####
一单位时间后
##&A
L#&#
#&##
##*#
二单位时间后
##&A
##&#
L&*#
####
三单位时间后
##&A
##&#
#&##
L#*#
四单位时间后
##&A
##&#
#&*#
#L##
牛能如果再向左走的话就会跟僵尸碰个正着,而且不论牛能怎么往回走,在(4,3)总能遇见僵尸,所以他失败了。