Из любопытства я проверял проблему, поставленную на Международном конкурсе программирования ACM 2009 года. Вопросы довольно интересные. Они доступны по адресу http://cm.baylor.edu/resources/pdf/2009Problems.pdf. Я не смог придумать алгоритм, который решил проблему 1, который я воспроизведу здесь. Это вызвало оживленную дискуссию в офисе, и мы думаем, что довольно близки к ответу, но мы были бы очень благодарны, если бы кто-нибудь смог найти / разработать полное решение (код не требуется).
Я воспроизведу здесь проблему для вашего удобства:
Задача 1
Рассмотрим задачу планирования самолетов, которые приземляются в аэропорту. Поступающие самолеты сообщают о своем местоположении, направлениях и скоростях, и затем диспетчер должен разработать график посадки, который доставит все самолеты безопасно на землю. Как правило, чем больше времени между последовательными посадками, тем «безопаснее» график посадки. Это дополнительное время дает пилотам возможность реагировать на изменение погоды и другие неожиданности.
К счастью, часть этой задачи планирования может быть автоматизирована - это то, куда вы входите. Вам будут предоставлены сценарии посадки самолетов. У каждого самолета есть временное окно, в течение которого он может безопасно приземлиться. Вы должны рассчитать заказ на посадку всех самолетов, которые соответствуют этим временным окнам. Кроме того, приземления самолета должны быть максимально растянуты, чтобы минимальный промежуток времени между последовательными посадками был как можно большим. Например, если три самолета приземляются в 10:00, 10:05 и 10:15, то наименьший промежуток составляет пять минут, который происходит между первыми двумя самолетами. Не все зазоры должны быть одинаковыми, но наименьший зазор должен быть как можно большим.
Input
Входной файл содержит несколько тестовых случаев, состоящих из описаний сценариев посадки. Каждый тестовый пример начинается со строки, содержащей одно целое число n (2 ≤ n ≤ 8), которое представляет собой количество самолетов в сценарии. Далее следуют n строк, каждая из которых содержит два целых числа a i , b i , которые дают начало и конец закрытого интервала [ a i , b i ], в течение которого плоскость i может безопасно приземлиться. Числа a i и b i указаны в минутах и удовлетворяют 0 ≤ a i ≤ b i ≤ 1440.
Вход заканчивается строкой, содержащей одно целое число ноль.
выход
Для каждого теста на входе выведите его номер (начиная с 1), за которым следует минимально достижимый промежуток времени между последовательными посадками. Выведите время, разделенное на минуты и секунды, округленное до ближайшей секунды. Следуйте формату образца вывода.
Пример ввода
3
0 10
5 15
10 15
2
0 10
10 20
0
Пример вывода
Case 1: 7:30
Case 2: 20:00