問題一覧 > 通常問題

No.340 雪の足跡

レベル : / 実行時間制限 : 1ケース 1.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 74
作問者 : Tawara
10 ProblemId : 932 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2016-03-05 08:23:44

Note

この問題は制約の都合上 C++/Java/C# などの速い言語を使わないと全てのテストケースを通すことが出来ないのでご注意ください。
00,01,02 のテストケースはLLでも通すことが可能です。

[参考]
writerが想定解法で解いたときのおおよその実行時間は以下のようになっています。

  • C++: 0.45 sec
  • Python2: 6 sec(TLE)
  • PyPy2: 1.5 sec(TLE)

[2016/2/9 追記]
入出力のせいなのかC#も相当しんどいみたいです。今のところお一人のみC#でAC(758 ms)しています.

問題文

Manaさんが朝目を覚ますと、街中に身長よりも高い雪が積もっていました。
今日はMitsuruさんの家に遊びに行こうと思っていたのに、このままでは遊びに行くどころか外にも出られません。
そこでManaさんは、雪を掘り進んで出かけていった大人達の通った跡を辿って出かけることを思いつきました。
ただManaさんは身体が弱く、長時間外に居るとすぐ風邪を引いてしまうためあまり長距離を歩かせられません。
心配した父親は、Mitsuruさんの家に行くのにどれだけ歩かないといけないか調べてあげることにしました。


Manaさんの住んでいる街は横幅 W、縦幅 H の長方形の街で、W×H個の正方形の区画から構成されます。
各区画は一番南西の区画を 0 番として番号付けされており、0 番の区画から東に w、北に h 進んだ所にある区画の番号はw+h×W (0w<W, 0h<H) です。
ある区画から移動できる方向は東西南北の4方向であり、隣接した区画間の距離は全て1です。
Manaさんの家は区画 0 、Mitsuruさんの家は区画 W×H1 にあるものとします。

大人達のお出かけは各々の家のある区画から始まり、今居る区画から直進して別の区画で立ち止まる、という行動の繰り返しによってなされます。
この直進の際に、隣接する二つの区画 B1, B2 の間を通過した大人が存在すると、Manaさんも B1B2 の間を行き来することが出来ます。
例えば以下の図で大人達が通った経路が黒の矢印だったとき、ManaさんがMitsuruさんのところにたどり着ける経路は赤と青の矢印になります。
Manaさんが大人達の進んだ方向とは逆方向に進めることに注意して下さい。

大人達の移動経路が与えられるので、Manaさんの家のある区画からMitsuruさんの家のある区画にたどり着く最短距離を求めてください。

入力

W H NM1B1 0 B1 1 ... B1 M1..MNBN 0 BN 1 ... BN MN

各行の要素は空白で区切られています。
1行目には街の横幅 W, 縦幅 H, 出かけた大人の数 N が与えられます。
2行目以降には大人達のお出かけの経路の情報が与えられます。
Miは大人 i がお出かけの際に立ち止まった回数、Bi 0 は大人 i の家のある区画、Bi j (j=1,..,Mi) は大人 ij 番目に立ち止まった区画の番号を示します。
Bi j から Bi j+1 への移動は東西南北いずれかの方向への直進で行われ、立ち止まるごとに直進の方向が変わるものとします。

入力は全て整数であり、以下の制約を満たします。
1W,H103
0N103
1Mi103
0Bi j<W×H
j=0,1,..,Mi1 について、
Bi jBi j+1( Bi jBi j+1(modW)Bi j÷W=Bi j+1÷W )
が成り立つことが保証されます。※ x は床関数です。

<追加制約>
00,01,02 のテストケースは
W,H,N,Mi3.0×102
を満たします。

出力

Manaさんが大人達の通った跡を通ってMitsuruさんの家のある区画にたどり着く最短距離を出力して下さい。たどり着けない場合は"Odekakedekinai.."を出力して下さい。
最後に改行してください。

サンプル

サンプル1
入力
3 3 2
2
0 1 4
2
4 7 8
出力
4

01478
の経路でたどり着くことが出来ます。

サンプル2
入力
4 4 3
3
6 2 0 12
3
3 11 8 4
3
15 13 5 6
出力
6

問題文で例に挙げたケースです。

サンプル3
入力
5 3 0
出力
Odekakedekinai..

出かけた大人が一人も居なかったようです。

サンプル4
入力
3 3 1
5
8 6 3 5 2 0
出力
8

隣接した二つの区画それぞれを大人が通過していても、その二区画間で通過が起こっていないとManaさんが通れないことに注意して下さい。
例えば14は大人が通過していますが、この二区画間で通過が起こっていないので14と通ることはできません。

サンプル5
入力
3 3 1
9
1 2 5 3 6 7 1 2 8 7
出力
Odekakedekinai..

Manaさんの住む区画だけが孤立していてお出かけが出来ません。

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。