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

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

Побег из заброшенного дома

면접 대비

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

요약
벽이 있는 격자에서 시작 칸과 출구 칸이 주어질 때, 가로 이동은 -1, 세로 이동은 +1의 온도 변화를 줄 때 만들 수 있는 최소 온도 차이를 구하고, 출구에 도달할 수 없으면 -1을 출력한다.
난이도

보통10점 중 5점

유형
그래프, BFS, 수학, 그리디
정답자
아직 제출이 없습니다

문제

<<Клуб неудачников>> под предводительством Билла пытается сбежать из заброшенного дома, в котором на них напал Пеннивайз. Дом можно представить в виде таблицы размера n×mn \times m, каждая клетка которой либо свободна, либо занята стенкой. Изначально, компания друзей находится в некоторой свободной клетке, а выход из дома находится в другой свободной клетке. Друзья могут переходить между соседними по стороне свободными клетками.

Чтобы напугать друзей и не дать им успешно убежать, Пеннивайз постоянно меняет температуру воздуха. А именно, каждый раз, когда друзья переходят между двумя клетками, соседними по горизонтали, он уменьшает температуру на 1 градус, а когда переходят между двумя клетками, соседними по вертикали, увеличивает температуру на 1 градус. Температура воздуха может принимать любые целочисленные значения, в том числе, температура может быть отрицательной.

Друзья хотят, чтобы конечная температура воздуха, когда они выберутся из дома, как можно меньше отличалась от исходной температуры воздуха. Помогите им определить минимальное возможное отличие исходной температуры от конечной. Обратите внимание, что значения температуры воздуха во время нахождения друзей в доме, их не интересует. При необходимости, друзья могут несколько раз проходить через любые свободные клетки, в том числе стартовую клетку и клетку с выходом.

입력

В первой строке даны два целых числа nn и mm --- размеры таблицы (1≤n,m≤10001 \le n, m \le 1000). В следующих nn строках находится по mm символов --- описание таблицы. Описание состоит из символов <<.>>, <<#>>, <<s>> и <<f>>. Если jj-й символ в ii-й строке равен <<#>>, то в клетке (i,j)(i, j) находится стенка, иначе эта клетка свободна. Символ <<s>> обозначает стартовую позицию друзей, а символ <<f>> обозначает клетку, в которой находится выход. Гарантируется, что в таблице содержится ровно один символ <<s>> и ровно один символ <<f>>.

출력

Если друзья не смогут выбраться из дома, выведите -1. Иначе, выведите неотрицательное число --- минимальное возможное отличие исходной температуры от конечной, которого они могут добиться.

힌트

В первом тесте друзья могут сначала перейти два раза в клетку сверху, и потом два раза в клетку справа. Тогда, сначала температура увеличится на 2, а после --- уменьшится на 2. В итоге, отличие от исходной будет 00 градусов.

예제1

  1. 예제 1

    입력
    4 3
    ..f
    ..#
    s##
    ...
    
    예상 출력
    0