#wch284. 滑冰

滑冰

滑冰(skate)

【题目描述】

有一个 nn 行 mm 列的网格。用 (i,j)(i,j) 表示从上往下第 ii 行、从左往右第 jj 列的格子。

字符 . 表示普通冰面,字符 # 表示岩石。字符 L、R、U、D 表示特殊冰面,分别对应左、右、上、下四个方向。网格最外围的所有格子一定都是岩石。开始时,玩家位于普通冰面 (2,2)(2,2)。

每次操作,玩家先选择上、下、左、右中的一个方向,然后沿该方向不断滑行:

  • 如果前方是冰面,就滑到前方格子并继续滑行;
  • 如果前方是岩石,就停在当前格子,本次操作结束。

当玩家经过 L、R、U、D 格子时,可以选择保持原来的滑行方向,也可以立即改为该字符所表示的方向,然后继续滑行。例如,玩家向右经过 D 时,可以继续向右,也可以改为向下。每次经过特殊冰面时都可以重新作出选择。

玩家可以进行任意多次操作。一个冰面格子只要曾经被玩家经过或停留,就称为可到达。请求出可到达的冰面格子数量。

【输入格式】

输入的第一行包含两个正整数 n,mn,m,表示网格的行数和列数。

接下来 nn 行,每行包含一个长度为 mm、只由 .、#、L、R、U、D 六种字符组成的字符串,表示网格。输入中各字符之间没有空格。

【输出格式】

输出一行一个整数,表示可到达的冰面格子数量。

【样例1输入】

5 5
#####
#...#
#.#.#
#...#
#####

【样例1输出】

8

【样例1解释】

玩家可以到达中间岩石周围的全部 88 个冰面格子。

【样例2输入】

6 7
#######
#.....#
#.#.#.#
#.....#
###.###
#######

【样例2输出】

12

【样例3输入】

6 7
#######
#..D..#
###.###
#.....#
#######
#######

【样例3输出】

11

【样例3解释】

玩家向右经过 D 时可以改为向下,从而进入下方区域。如果忽略 D 的转向作用,则无法到达这些格子。

【数据范围】

对于 30%30\% 的数据,n,m≤10n,m\le 10。

对于 40%40\% 的数据,n,m≤80n,m\le 80。

对于 60%60\% 的数据,网格中不包含 L、R、U、D。

对于 100%100\% 的数据,3≤n,m≤5003\le n,m\le 500,(2,2)(2,2) 一定是普通冰面,且网格最外围的格子一定都是岩石。