F - I want to eat Cookies!

2 secs 1024 MB
matcharate12's icon matcharate12

Python言語で提出する際の諸注意

  • この問題においてPython言語で解く際は、必ず入力の後に strip 関数を適用してください
    つまり文字列の入力の際に input().strip() と書いてください(でないとジャッジの環境上、WAになる可能性があります)

Story

🍪

2年前か3年前か...
どこかのもふもふうさぎ界隈では、クッキーが話題になっていたようです。ラテ君はそれを思い出して、クッキーが食べたくなったようです。

おや、ちょうどあそこに新品のクッキーが落ちてますね。
そこで、道の掃除ついでにクッキーを拾っていくことにしたようです。ある意味お金持ちですね :)

問題

HH マス、横 WW マスのマス目状の盤面 AA が与えられます。
AA#, . , o からなり、# は壁マス、. は道マス、o はクッキーマスです。クッキーマスは道マスの一種としてみなされます。
ここで上から i (1iH)i\ (1\le i\le H) 番目、左から j (1jW)j\ (1\le j\le W) 番目のマスをマス (i,j)(i,j) と表すことにします。

今、ラテ君は (1,1)(1,1) に立っており、道マス(クッキーマスを含む)のみを通って (H,W)(H,W) にたどり着きたいと思っています。
この時ラテ君は上下左右の移動をすることができ、斜めには移動できません。

ラテ君はクッキーが食べたくて仕方ありません。
なので (H,W)(H,W) にたどり着く前に必ずすべてのクッキーを食べてから移動しようと思っています。ここで一度通ったマスに再度通っても構いません。

ただしクッキーマスが一つも存在しない場合は、ラテ君は寄り道をせずそのまま (H,W)(H,W) に移動します。

このとき、ラテ君は少なくとも何マス分の移動を行う必要がありますか?
ただしすべてのクッキーを拾うことができない場合は、その旨を報告してください。

入力

入力は以下の形式で与えられる。

HHWW
A1,1A1,2A1,WA_{1,1}A_{1,2}\dots A_{1,W}
A2,1A2,2A2,WA_{2,1}A_{2,2}\dots A_{2,W}
\vdots
AH,1AH,2AH,WA_{H,1}A_{H,2}\dots A_{H,W}

制約

  • 2H,W5002\le H,W\le 500
  • Ai,jA_{i,j}# . o からなる
  • Ai,jA_{i,j} に含まれる o の個数は 1515 以下
  • A1,1=AH,W=A_{1,1}=A_{H,W}= .

出力

答えを整数で出力せよ。
ただしどのように移動しても、すべてのクッキーを拾いながら (H,W)(H,W) にたどり着けないなら -1 を出力せよ。

入出力例

入力例1
4 5
.#o.#
..#..
#...#
#.#..
出力例1
13

クッキーマスは (1,3)(1,3) です。例えば次のように行動することで計 1313 マス分の移動でたどり着くことができます。

  • (1,1)(2,1)(2,2)(3,2)(3,3)(3,4)(2,4)(1,4)(1,3)(1,1)\to (2,1)\to (2,2)\to (3,2)\to (3,3)\to (3,4)\to (2,4)\to (1,4)\to (1,3) と移動し、クッキーを食べる
  • (1,3)(1,4)(2,4)(3,4)(4,4)(4,5)(1,3)\to (1,4)\to (2,4)\to (3,4)\to (4,4)\to (4,5) と移動する

1212 マス分以下の移動で目標を達成することはできないので、1313 が答えとなります。

入力例2
3 3
.#o
.##
o..
出力例2
-1

(3,1)(3,1) にあるクッキーを拾いながら (H,W)=(3,3)(H,W)=(3,3) へ移動することはできますが、(1,1)(1,1) にあるクッキーは拾うことができません。

入力例3
2 2
.o
o.
出力例3
4

提出


Go (1.21)