Ограничения: время – 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-го участника из второй.