Задача: Имеются два сотрудника A и B, которые хотят провести встречу.
Каждый сотрудник предоставляет список "свободных окон".
Каждое такое окно представляет собой полуинтервал,
у которого есть начало (start, включительно) и конец (end, невключительно).
Гарантируется, что start < end, т.е. все интервалы непустые.
Кроме того гарантируется, что интервалы отсортированы по времени начала, не пересекаются и
не "соприкасаются" (не существует такого индекса i в списке интервалов,
что interval[i].end == interval[i + 1].start).
Нужно найти ближайшее (наиболее раннее) временное окно, в которое оба сотрудника смогут
участвовать во встрече, если оно существует.
Формат ввода: первая строка содержит требуемую
продолжительность встречи в минутах duration.
Следующая строка содержит количество доступных для встреч окон сотрудника A countA.
В следующих countA строках содержатся времена начал и концов свободных окон сотрудника A в минутах,
соединённые через пробел по одной встрече в каждой строке.
Следующая строка содержит количество доступных для встреч окон сотрудника B countB. В следующих
countB строках содержатся времена начал и концов свободных окон сотрудника B в минутах,
соединённые через пробел по одной встрече в каждой строке.
Формат вывода: В единственную строку запишите время начала и
конца найденной возможности для встречи в минутах, соединённое через пробел.
Если встреча с заданными условиями невозможна, запишите в ответ строку −1 −1.
Пример 1
Ввод
1
1
2 3
1
1 4
Вывод
2 3
Пример 2
Ввод
1
1
2 3
1
3 4
Вывод
-1 -1
Ход моих мыслей: По условию у нас есть два списка с названиями А и В в каждом из которых есть количество встреч(count) и при этом в каждой яйчейке списка есть два значения int(start и end) и также есть переменная duratio, которая показывает продолжительность встречи.
1. Сначала мы должны определить попадает ли в данный интервал в каждом списке время duratio.
2. Если хотя бы один из интервалов не попадает, то возвращаем строку -1 -1.
3. Если оба интервала попадают, то тогда сравниваем значения start и end в каждом интервале. Если пересечений в интервалах нет, то выводим строку -1 -1.
4.В конце выводим наибольшее значение start и наименьшее end.
Anonymous #3131362
43 уровень
Не могу понять как синтаксически решать задачу
Обсуждается
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Денис Enterprise Java Developer
7 июля 2023, 09:44
В целом это явно алгоритмическая задача на поиск пересечений. Для начала я бы уточнил можно ли сливать интервалы воедино, например если у человека три интервала по 20 минут, а встреча планируется на час, он ведь может в ней теоретически поучаствовать?
Ну вот от этого и отталкиваться, сначала определить возможна ли встреча в принципе для обоих кандидатов, если возможна - сравнить их таймлайны, можно взять любого сотрудника, найти у него подходящие периоды (если прерываются) или глобальную дельту по времени и проверить доступен ли один из них другому сотруднику, если нет, найти наиболее ранний у второго сотрудника, но начиная с наиболее раннего времени первого, ведь тот все равно раньше встретиться не сможет.
Как-то так и двигаться. Это явное решение в лоб, оно хреновое, но выглядит реализуемым.
А еще мне кажется, что это может быть типовая задача и можно ее как-то погуглить :)
0
Anonymous #3131362
7 июля 2023, 10:26
Нет, сливать интервалы нельзя
0