아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

Паякан в беде

시간 제한1초메모리 제한1024 MB

요약
길이 k, 너비 1인 생물이 암초와 물로 된 n×m 격자에서 머리가 (n, m)에 도달하는 최소 시간을 구하고, 불가능하면 -1을 출력한다.
난이도

보통10점 중 7점

유형
BFS, 그래프, 시뮬레이션, 행렬
정답자
아직 제출이 없습니다

문제

Полковник Куорич и его приспешники преследуют тулкуна Паякана на добывающем корабле. Неподалеку располагается база На'ви и тулкун уже почти почувствовал себя спасенным. Однако, чтобы добраться до базы, ему необходимо преодолеть рифовые заграждения. Поле из рифовых заграждений представляет собой прямоугольник из клеток размера n×mn \times m, каждая из клеток может быть либо рифом, либо водой.

Тулкун имеет длину kk и ширину 11, и хочет проплыть эти рифы как можно быстрее. Тулкуны весьма неповоротливы, поэтому могут двигаться только вперед и назад относительно своего текущего направления (от хвоста к голове), а также поворачивать на 90∘90^\circ по следующим правилам: если голова тулкуна длины kk находилась в точке (i,j)(i, j), то после поворота его хвост окажется в точке (i,j)(i, j), а голова в точке (i+k−1,j)(i + k - 1, j) или (i−k+1,j)(i - k + 1, j), если он был ориентирован горизонтально, и в точке (i,j+k−1)(i, j + k - 1) или (i,j−k+1)(i, j - k + 1), если он был ориентирован вертикально. Ниже показаны оба поворота из горизонтального положения для k>1k > 1 и k=1k = 1 (во втором случае меняется только направление):

Каждый сдвиг на одну клетку и каждый поворот занимают у Паякана одну единицу времени.

Изначально Паякан может заплыть на поле в любой ориентации, то есть занять либо клетки (1,1)…(1,k)(1, 1) \ldots (1, k), либо (1,1)…(k,1)(1, 1) \ldots (k, 1), при этом его голова будет находиться либо в точке (1,k)(1, k), либо в точке (k,1)(k, 1). Считается, что вы спасете его, если он окажется головой в правой нижней клетке рифового поля, то есть в точке (n,m)(n, m). Помогите Паякану спастись и определите, за какое время он сможет оказаться в правом нижнем углу, или скажите, что это невозможно.

입력

В первой строке через пробел даны три целых числа nn, mm и kk --- размеры поля и длина тулкуна (1⩽n,m⩽10001 \leqslant n, m \leqslant 1000; 1⩽k⩽min⁡(n,m)1 \leqslant k \leqslant \min(n, m); n⋅m⩽105n \cdot m \leqslant 10^5).

В следующих nn строках дано описание поля, каждая строка имеет длину mm и состоит из символов '\#' соответствует рифу, символ '.' --- воде.

출력

Выведите одно число --- количество действий, которое надо совершить тулкуну, чтобы попасть в правый нижний угол поля, или −1-1, если это невозможно.

힌트

В первом примере тулкун может начать в направлении <<вправо>>, проплыть две клетки вперед, повернуться по часовой стрелке и сделать еще два движения вперед. В сумме перемещение занимает 55 действий.

Путь тулкуна во втором примере показан на рисунке ниже. Маленькие стрелки соответствуют перемещениям головы вперед или назад, а большие --- поворотам.

예제3

  1. 예제 1

    입력
    3 3 1
    ...
    .#.
    ...
    
    예상 출력
    5
    
  2. 예제 2

    입력
    6 6 3
    .....#
    #.##.#
    #....#
    #...##
    #.#.##
    .#....
    
    예상 출력
    10
    
  3. 예제 3

    입력
    2 6 2
    ..#...
    ...#..
    
    예상 출력
    -1