#JXGQ24016. 冰壶挑战

冰壶挑战

题目描述

强哥参加了学校举办的冰壶挑战赛。比赛场地是一个 N×MN \times M 的矩形冰场,其中 (i,j)(i, j) 表示第 ii 行第 jj 列。

冰场被表示为 NN 个字符串 S1,S2,,SNS_1, S_2, \dots, S_N,每个字符串长度为 MM

冰场的每个格子要么是光滑的冰面(用 . 表示),要么是粗糙的岩石障碍(用 # 表示)。

冰场的四周(第 11 行、第 NN 行、第 11 列、第 MM 列)都设置了岩石障碍作为边界,确保冰壶不会飞出场地。强哥的冰壶起始位置在 (2,2)(2, 2),这个位置一定是冰面。

强哥可以推动冰壶零次或多次。每次推动时,他先选择一个方向(上、下、左、右),然后冰壶会沿着这个方向一直滑动,直到碰到岩石障碍才会停下(冰壶不会停在非冰面的格子上,但会经过这些格子)。

现在需要计算强哥的冰壶能够到达或经过的所有格子数量(包括滑行过程中经过的格子)。

输入格式

N M
S1
S2
...
SN

第一行两个正整数 NNMM,表示冰场的长和宽。 接下来 NN 行,每行一个长度为 MM 的字符串,表示冰场的布局。

输出格式

输出一个整数,表示冰壶能到达或经过的格子总数。

输入输出样例

样例 1

输入

6 6
######
#....#
#.#..#
#..#.#
#....#
######

输出

12

说明 冰壶可以经过 (5,5)(5,5),移动路径为:(2,2)(5,2)(5,5)(2, 2) \to (5, 2) \to (5, 5) 也可以经过 (2,4)(2, 4),移动路径为:(2,2)(2,5)(2, 2) \to (2, 5)(途经 (2,4)(2, 4)) 但无法到达 (3,4)(3, 4)

样例 2

输入

21 25
#########################
#..............###...####
#..............#..#...###
#........###...#...#...##
#........#..#..#........#
#...##...#..#..#...#....#
#..#..#..###...#..#.....#
#..#..#..#..#..###......#
#..####..#..#...........#
#..#..#..###............#
#..#..#.................#
#........##.............#
#.......#..#............#
#..........#....#.......#
#........###...##....#..#
#..........#..#.#...##..#
#.......#..#....#..#.#..#
##.......##.....#....#..#
###.............#....#..#
####.................#..#
#########################

输出

215

数据范围

  • 3N,M2003 \le N, M \le 200
  • 字符串 SiS_i 仅包含字符 .#
  • 场地边界都是 #(岩石)
  • 起始位置 (2,2)(2,2) 一定是 .(冰面)