printРабочее место участника

printЗадачи

1561. Прорыв через лабиринт

Ограничения: время – 500ms/1000ms, память – 32MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (0)

14728.gif
В лабиринте размером `N\ times\ N` с одним выходом кладоискатель нашел клад и хочет вынести его из лабиринта за минимальное количество ходов. У него есть `r` единиц взрывчатки, которая позволяет уничтожить единичную часть внутренней (но не внешней!) стены лабиринта. Ход – это переход в соседнюю клетку по горизонтали или вертикали с возможным одновременным взрывом мешающей части стены. Верхняя левая клетка лабиринта имеет координаты (1,1).
Во входном файле в первой строке содержится целые числа `N` (`2\ ≤\ N\ ≤\ 50`) и `r` (`0\ ≤\ r\ ≤\ 3`), координаты кладоискателя `x,\ y` (`0\ <\ x,\ y\ ≤\ N`, `x` – столбец, `y` – строка) и координаты выхода `u,\ v` (`0\ ≤\ u,\ v\ ≤\ N+1`). Во второй строке указывается количество единичных частей внутренних стен `m` (`0\ ≤\ m\ ≤\ 2*(N-1)*N`). В последующих `m` строках находятся координаты клеток `a_i`, `b_i` и `c_i`, `d_i` (`0\ <\ a_i,b_i,c_i,d_i\ ≤\ N`), между которыми находится `i`-я единичная часть стены.
В выходной файл вывести минимальное количество ходов и количество использованной взрывчатки. Если есть несколько путей одинаковой длины, то выбрать путь с минимальным использованием взрывчатки. Если путь до выхода не найден, то вывести 0 0.

Пример ввода (на рисунке)

4 1 1 1 3 0
9
1 1 2 1
2 2 1 2
1 3 2 3
2 1 3 1
3 2 3 1
4 2 4 3
3 3 2 3
3 3 3 4
2 4 3 4

Вывод для примера

7 1
loading