Ограничения: время – 1s/2s, память – 256MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод
Послать решение Blockly Посылки Темы Где Обсудить (0)
Работа с парусами требует большой слаженности и физической силы, поэтому для тренировки экипаж корабля
разбивается на две команды из `N` человек и проводят соревнование по перетягиванию каната. По правилам соревнований
разница в суммарном весе команд не должна превышать `D`. Поэтому капитан перед началом соревнований берет
по одному участнику из каждой команды и меняет их местами, пока разница в суммарном весе команд не станет
меньше или равна `D`.
Напишите программу, которая определит, минимальное количество обменов для достижения цели и порядок таких обменов.
Первая строка ввода содержит два целых числа – количество участников в командах `N` (`2\ ≤\ N\ ≤\ 20`) и
предельную разницу в весе `D` (`1\ ≤\ D\ ≤\ 10000`). Далее следует две строки, содержащих по `N` чисел
от 1 до 10000 – веса участников в первой и во второй команде.
Первая строка вывода должна содержать одно целое число – минимальное количество обменов `K`.
Далее должно быть `K` строк, содержащих по два целых числа от 1 до `N` – номер участника из первой
команды и номер участника из второй команды, которых нужно поменять. Если существует несколько
вариантов с минимальным количеством обменов, то вывести вариант, при котором итоговая суммарная
разница будет как можно меньше. Если существует несколько вариантов с минимальной итоговой разницей, то можно
вывести любой из них. Если добиться желаемой разницы невозможно, то вывести в первой строке `-1`.
Пример ввода
3 100
160 155 100
95 100 105
Пояснение к примеру: также можно поменять 2-го участника из первой команды на 1-го или 2-го участника из второй.