Входной файл содержит заявки пассажиров, желающих сдать свой багаж в камеру хранения. В заявке указаны время сдачи багажа и время освобождения ячейки (в минутах от начала суток). Багаж одного пассажира размещается в одной свободной ячейке с минимальным номером. Ячейки пронумерованы начиная с единицы. Размещение багажа в ячейке или её освобождение происходит в течение 1 мин. Багаж можно поместить в только что освобожденную ячейку начиная со следующей минуты. Если в момент сдачи багажа свободных ячеек нет, то пассажир уходит.
Входные данные представлены в файле 26-111.txt. В первой строке входного файла находится натуральное число , не превышающее 1000, – количество ячеек в камере хранения. Во второй строке – натуральное число
(
1000), обозначающее количество пассажиров. Каждая из следующих
строк содержит два натуральных числа, каждое из которых не превышает 1440: указанное в заявке время размещения багажа в ячейке и время освобождения ячейки (в минутах от начала суток).
Определите максимальную сумму двух времен сдачи багажа, кратную 60.
f = open(’26-111.txt’)
k = int(f.readline()) # Количество ячеек
n = int(f.readline()) # Количество пассажиров
# Сортировка по времени сдачи багажа
a = sorted([list(map(int, i.split())) for i in f])
cells = [[] for i in range(k)] # Ячейки
pax = [] # Пассажиры
c = 0 # Счетчик пассажиров, сдавших багаж
for i in a: # Для каждого пассажира
for j in cells: # проверяем все ячейки
# Если ячейка пустая или успевает освободиться
if (not j) or (i[0] > j[-1][1]):
j.append(i) # Cкладываем багаж в ячейку
pax.append(i[1]-i[0]) # Время нахождения багажа в ячейке
c += 1 # Увеличиваем счетчик пассажиров
break # Останавливаем цикл, так как уже разместили багаж
m = [0]*60 # Максимальные значения с разными остатками от деления на 60
mx = 0 # Максимальная сумма
for i in range(len(pax)-1): # Проверяем каждого пассажира
# Выбираем максимум между текущим и существующим значением
m[pax[i] % 60] = max(m[pax[i] % 60], pax[i])
d = (60-(pax[i+1] % 60)) % 60 # Значение противоположного от 60ти остатка
# Если сумма текущего времени и максимального c остатком d больше mx
if (pax[i+1]+m[d]) > mx and m[d] > 0:
mx = pax[i+1]+m[d] # Обновляем mx
print(mx)