AT_arc005_3 [ARC005C] 器物損壊!高橋君
题目描述
高桥君发现自己的卡已经过期了,于是他决定放弃,直接去鱼店买鳗鱼。
他所居住的城市呈长方形,被划分为网格状的区块。每个区块要么是道路,要么是围墙。高桥君只能在道路上沿东西南北方向移动,不能斜着走。同时,围墙区块是无法通过的。由于从他家到鱼店的路线非常复杂,仅靠步行很难到达。
不过,高桥君很有力气,他最多可以将与道路相邻的上下左右方向的围墙破坏 $2$ 次,将其变为道路。
请你判断高桥君是否能够到达鱼店。如果可以到达,输出 `YES`,否则输出 `NO`。输入格式如下,从标准输入读取。
> $H$ $W$ $c_{(0,0)}c_{(0,1)}\ldots c_{(0,W-1)}$
> $c_{(1,0)}c_{(1,1)}\ldots c_{(1,W-1)}$
> $\vdots$
> $c_{(H-1,0)}c_{(H-1,1)}\ldots c_{(H-1,W-1)}$
- 输入共 $H+1$ 行。
- 第 $1$ 行包含两个整数,分别表示城市南北方向的长度 $H(1\leq H\leq 500)$ 和东西方向的长度 $W(1\leq W\leq 500)$,以空格分隔。
- 从第 $2$ 行开始的 $H$ 行,每行包含该网格城市每个区块的状态 $c_{(i,j)}(0\leq i\leq H-1, 0\leq j\leq W-1)$。
- 第 $i$ 行第 $j$ 个字符 $c_{(i,j)}$ 为 `s`、`g`、`.`、`#` 之一,表示坐标 $(j,i)$ 的状态如下:
- `s`:该区块为高桥君的家。
- `g`:该区块为鱼店。
- `.`:该区块为道路。
- `#`:该区块为围墙。
- 高桥君可以通过家、鱼店、道路,但不能通过围墙。
- 不能走出给定城市的范围。
- `s` 和 `g` 各出现一次。
高桥君最多可以破坏 $2$ 次围墙,如果能从家到达鱼店,输出 `YES`,否则输出 `NO`。最后输出要换行。
```
4 5
s####
....#
#####
#...g
```
```
YES
```
- 只要破坏 $(1,2)$、$(2,2)$、$(3,2)$ 中的任意一个围墙,就可以到达鱼店。
```
4 4
...s
....
....
.g..
```
```
YES
```
- 没有围墙,可以直接到达。
```
10 10
s.........
#########.
#.......#.
#..####.#.
##....#.#.
#####.#.#.
g##.#.#.#.
###.#.#.#.
###.#.#.#.
#.....#...
```
```
YES
```
- 只需破坏 $(1,6)$、$(2,6)$ 这两个围墙即可到达。
```
6 6
.....s
###...
###...
######
...###
g.####
```
```
YES
```
- 例如破坏 $(3,3)$、$(2,3)$ 这两个围墙即可到达。
```
1 10
s..####..g
```
```
NO
```
- 即使破坏 $2$ 个围墙,也无法到达鱼店。
输入格式
第 $1$ 行包含两个整数 $H$ 和 $W$,以空格分隔。
接下来 $H$ 行,每行 $W$ 个字符,表示城市网格的状态。
输出格式
如果能到达鱼店,输出 `YES`,否则输出 `NO`。最后输出换行。
说明/提示
无。
由 ChatGPT 4.1 翻译