No.2913 二次元距離空間
タグ : / 解いたユーザー数 40
作問者 : 👑 p-adic / テスター : 👑 AngrySadEight
問題文
入力の最初に $2$ 個の正整数 $H, W$ が与えられます。
$H$ 行 $W$ 列のマス目があります。$H$ 以下の各正整数 $i$ と $W$ 以下の各正整数 $j$ に対し、上から $i$ 番目かつ左から $j$ 番目のマスをマス $(i,j)$ と表します。
あなたは最初マス $(1,1)$ におり、上下左右に隣接したマスへの移動のみを繰り返してマス $(H,W)$ に向かおうとしています。
ただしいくつかのマスには穴が空いています。あなたはマス以外や穴の空いたマスへ移動することはできません。
各マスの穴の有無の情報は.
と#
のみからなる $H$ 個の長さ $W$ の文字列として与えられ、$H$ 以下の任意の正整数 $i$ に対し $i$ 個目に与えられる文字列を $S_i$ と置くと、$W$ 以下の任意の正整数 $j$ に対し $S_i$ の左から $j$ 文字目が#
であることとマス $(i,j)$ に穴が空いていることは同値です。
あなたがマス $(1,1)$ からマス $(H,W)$ へ移動できるか否かを判定し、移動できる場合は
- マス $(1,1)$ からマス $(H,W)$ へ移動する際の左右方向の移動回数の最小値 $X$
- 左右方向の移動回数が $X$ となるようにマス $(1,1)$ からマス $(H,W)$ へ移動する際の上下方向の移動回数の最小値 $Y$
を求めてください。
入力
この時、入力は以下の形式で標準入力から $1 + H$ 行で与えられます:
- $1$ 行目に $H, W$ が半角空白区切りで与えられます。
- $H$ 以下の各正整数 $i$ に対し、$1 + i$ 行目に $S_i$ が与えられます。
$H$ $W$ $S_1$ $\vdots$ $S_H$
制約
入力は以下の制約を満たします:
- $H$ は $2 \leq H \leq 500$ を満たす整数である。
- $W$ は $2 \leq W \leq 500$ を満たす整数である。
- $H$ 以下の任意の正整数 $i$ に対し、$S_i$ は
.
と#
のみからなる長さ $W$ の文字列である。 - $S_1$ の左から $1$ 文字目は
.
である。 - $S_H$ の左から $W$ 文字目は
.
である。
出力
あなたがマス $(1,1)$ からマス $(H,W)$ に移動できないならばNo
と出力してください。
No
移動できるならば Yes
と $1$ 行目に出力し、$X,Y$ を半角空白区切りで $2$ 行目に出力してください。
Yes $X$ $Y$
最後に改行してください。
サンプル
サンプル1
入力
2 2 .. ..
出力
Yes 1 1
どこにも穴が空いていないので、例えばあなたは行番号と列番号の組を $(1,1) \mapsto (1,2) \mapsto (2,2)$ と変化させるように移動することで $(H,W) = (2,2)$ に移動できます。この際の左右方向の移動回数と上下方向の移動回数はともに $1$ です。左右方向の移動回数が $1$ より少ない移動方法はありません。また左右方向の移動回数が $1$ でありかつ上下方向の移動回数が $1$ より少ないような移動方法はありません。
サンプル2
入力
2 2 .# #.
出力
No
あなたは最初にマス $(1,1)$ におり、上下左右に隣接するマスは全て穴が空いているため移動できません。
サンプル3
入力
9 7 ....... .#####. .####.. .####.# .####.. .#...#. .#.#.#. .#.#.#. ...#...
出力
Yes 6 14
$(X,Y) \neq (8,8)$ であることに注意しましょう。 $8$ より $6$ の方が小さいです。
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。