atcoder#ABC170F. [ABC170F] Pond Skater

[ABC170F] Pond Skater

题目描述

アメンボのすぬけ君は南北 H H マス東西 W W マスの長方形の形をしたグリッド状の池に住んでいます。北から i i 番目、西から j j 番目のマスをマス (i,j) (i,j) とします。

いくつかのマスには蓮の葉が浮かんでおり、すぬけ君はそれらのマスには入ることができません。 cij c_{ij} @ のときマス (i,j) (i,j) に蓮の葉が浮かんでいること、.のときそうでないことを表します。

すぬけ君は一回水をかくことで東西南北のいずれかの方向に 1 1 マス以上 K K マス以下移動することができます。 移動の途中に蓮の葉のあるマスがあってはいけません。また、蓮の葉のあるマスや池の外に移動することもできません。

すぬけ君がマス (x1,y1) (x_1,y_1) から (x2,y2) (x_2,y_2) まで移動するのに最小で何回水をかく必要があるか求めてください。 (x1,y1) (x_1,y_1) から (x2,y2) (x_2,y_2) まで移動することができない場合、そのことを指摘してください。

输入格式

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

H H W W K K x1 x_1 y1 y_1 x2 x_2 y2 y_2 c1,1c1,2 c_{1,1}c_{1,2} .. .. c1,W c_{1,W} c2,1c2,2 c_{2,1}c_{2,2} .. .. c2,W c_{2,W} : : cH,1cH,2 c_{H,1}c_{H,2} .. .. cH,W c_{H,W}

输出格式

すぬけ君がマス (x1,y1) (x_1,y_1) から (x2,y2) (x_2,y_2) まで移動するのに必要な最小の水かきの回数を出力せよ。 (x1,y1) (x_1,y_1) から (x2,y2) (x_2,y_2) まで移動することができない場合、-1を出力せよ。

题目大意

你在一个划分为上下 HH 行,左右 WW 列的长方形网格中,网格从上到下的第 ii 行的从左往右第 jj 列被编号为 (i,j)(i,j) ,如果 ci,jc_{i,j}@ ,则 (i,j)(i,j) 不能通过。

你现在在 (x1,y1)(x_1,y_1),你每步可以往上下左右走 11KK 格,问你最少需要多少步才能走到 (x2,y2)(x_2,y_2) ,如果不能走到,输出 1-1

输入先是一行三个整数 H,W,KH,W,K ,再是一行四个整数 x1,y1,x2,y2x_1,y_1,x_2,y_2,接着是 H×WH \times W 的字符矩阵,第 iijj 列表示 ci,jc_{i,j}

3 5 2
3 2 3 4
.....
.@..@
..@..
5
1 6 4
1 1 1 6
......
2
3 3 1
2 1 2 3
.@.
.@.
.@.
-1

提示

制約

  • 1  H,W,K  106 1\ \leq\ H,W,K\ \leq\ 10^6
  • H × W  106 H\ \times\ W\ \leq\ 10^6
  • 1  x1,x2  H 1\ \leq\ x_1,x_2\ \leq\ H
  • 1  y1,y2  W 1\ \leq\ y_1,y_2\ \leq\ W
  • x1  x2 x_1\ \neq\ x_2 または y1  y2 y_1\ \neq\ y_2
  • ci,j c_{i,j} . または @
  • cx1,y1 = c_{x_1,y_1}\ = .
  • cx2,y2 = c_{x_2,y_2}\ = .
  • 入力される数はすべて整数である。

Sample Explanation 1

はじめ、すぬけ君はマス (3,2) (3,2) にいます。 以下のように 5 5 回水をかくことでマス (3,4) (3,4) まで移動することができます。 - マス (3,2) (3,2) から西に 1 1 マス進み、マス (3,1) (3,1) に移動する。 - マス (3,1) (3,1) から北に 2 2 マス進み、マス (1,1) (1,1) に移動する。 - マス (1,1) (1,1) から東に 2 2 マス進み、マス (1,3) (1,3) に移動する。 - マス (1,3) (1,3) から東に 1 1 マス進み、マス (1,4) (1,4) に移動する。 - マス (1,4) (1,4) から南に 2 2 マス進み、マス (3,4) (3,4) に移動する。