import datetime
def parse_time(time_str):
return datetime.datetime.strptime(time_str, '%H:%M')
def time_to_minutes(time_obj):
return time_obj.hour * 60 + time_obj.minute
def solve():
n = int(input())
lectures = []
for _ in range(n):
num_lectures = int(input())
teacher_lectures = []
for _ in range(num_lectures):
start_time_str, end_time_str = input().split('-')
start_time = parse_time(start_time_str)
end_time = parse_time(end_time_str)
teacher_lectures.append((start_time, end_time))
lectures.append(teacher_lectures)
min_lectures_needed = (n + 1) // 2
min_start_time = None
min_total_lecture_time = 0
min_waiting_time = float('inf')
import itertools
for combination in itertools.combinations(lectures, min_lectures_needed):
all_possible_lectures = []
for teacher_lectures in combination:
for lecture in teacher_lectures:
all_possible_lectures.append((lecture[0] - datetime.timedelta(minutes=5), lecture[1] + datetime.timedelta(minutes=5)))
all_possible_lectures.sort()
for i in range(1 << len(all_possible_lectures)):
chosen_lectures = []
for j in range(len(all_possible_lectures)):
if (i >> j) & 1:
chosen_lectures.append(all_possible_lectures[j])
if len(chosen_lectures) != min_lectures_needed:
continue
chosen_lectures.sort(key = lambda x:x[0])
current_start_time = chosen_lectures[0][0]
current_total_lecture_time = 0
current_waiting_time = 0
for k in range(len(chosen_lectures)):
current_total_lecture_time += time_to_minutes(chosen_lectures[k][1]) - time_to_minutes(chosen_lectures[k][0])
if k > 0:
current_waiting_time += max(0,time_to_minutes(chosen_lectures[k][0]) - time_to_minutes(chosen_lectures[k-1][1]) )
if min_start_time is None or current_start_time < min_start_time or (current_start_time == min_start_time and current_waiting_time < min_waiting_time):
min_start_time = current_start_time
min_total_lecture_time = current_total_lecture_time
min_waiting_time = current_waiting_time
print(min_start_time.strftime('%H:%M'))
print(min_total_lecture_time)
print(min_waiting_time)
solve()
Преподаватели читают одну и ту же лекцию несколько раз в день, в разные промежутки времени. Но у преподавателей есть негласное правило – можно опоздать на лекцию не больше, чем на 5 минут от начала. Можно уйти с лекции на 5 минут раньше.
Но иногда преподаватели разбросаны по расписанию очень сильно, иногда их время пересекается с другими. Поэтому Маше нужна помощь, чтобы по входному расписанию преподавателей определить, во сколько ей нужно быть в университете, чтобы посетить лекции минимум 50% преподавателей (если преподавателей нечётное количество, то округляем вверх (1 округляется до 1, 3 до 2 и так далее), а также провести минимальное количество времени в ожидании между лекциями (если они не подряд).
Входные данные:
На первой строке подаётся целое число N (1 <= N <= 100) – количество преподавателей, на лекции которых хочет сходить Маша.
Далее подаётся N наборов строк в виде:
Выходные данные
Примечание:
Входные данные
3
2
10:05-11:50
17:00-18:45
1
11:45-12:30
2
13:00-14:00
16:00-17:00
Выходные данные
10:05
145
0
Маше требуется посетить лекции 50% преподавателей, поэтому достаточно посетить 2 преподавателей. Маша пытается найти самое минимальное время для ожидания между занятиями. В данном случае возможны два варианта, когда Маша проведёт между занятиями 0 минут времени:
Так как время ожидания между лекциями одинаковое, то выбираем тот вариант, при котором Маша приедет как можно раньше – 10:05.