В прачечной есть K стиральных машин, которые пронумерованы с 1. Принимаемые вещи кладутся в свободную стиральную машину с минимальным номером. Известно время, когда клиенты сдают и забирают вещи (в минутах с начала суток). Среди стиральных машин есть супер-стиральные машины, они стирают вещи в 1.5 раза быстрее. У таких машин номер кратен 7. Если время стирки в супер-стиральной машине получилось не целым, то оно округляется до целого числа в меньшую сторону. Стиральная машина доступна для вещей, начиная со следующей минуты, после окончания срока стирки. Если свободных машинок не находится, то вещи не принимаются в стиральную машину и клиент уходит. Если в один момент пришло несколько клиентов, то в первую очередь, вещи принимаются у того, чья стирка займет большее время (без учета использования супер-стиральных машин).
Определите максимальное суммарное время стирки пары клиентов, таких что один клиент из пары постирал вещи в обычной машинке, а второй в супер-стиральной машине, при этом суммарное время должно быть кратно 19.
Входные данные:
В первой строке входного файла находится число – количество стиральных машин, во второй строке файла число
– количество клиентов, сдающих свои вещи (натуральное число, не превышающее 1000). Каждая из следующих
строк содержит два натуральных числа, не превышающих 1440: время сдачи вещей и время выдачи вещей.
Выходные данные:
Программа должна вывести одно число: максимальное суммарное время кратное 19 подходящей пары клиентов.
file = open(’26.txt’)
count_machines = int(file.readline()) # количество стиральных машин
count_client = int(file.readline()) # количество клиентов
array_client = list(list(map(int,i.split())) for i in file)
# cортируем список клиентов по возрастанию времени прихода и по убыванию времени ухода
array_client.sort(key = lambda x:(x[0],-x[1]))
machines = [-1]*count_machines # симулируем стиральные машины. В каждой ячейке будет записано время освобождения определенной стиральной машины
cs19 = [0]*19 #подсчет количества стирок с различными остатками от деления на 19
c19 = [0]*19 #подсчет количества супер-стирок с различными остатками от деления на 19
for start,end in array_client: # перебор клиентов
for i in range(len(machines)): # проход по стиральным машинам
if start > machines[i]: # если текущий клиент может положить вещи в определенную стиральную машину
if (i+1) % 7 == 0: # если это супер стиралка
tim = int((end - start) // 1.5) # то записываем время выполнения стирки в два раза быстрее
machines[i] = start + tim
cs19[tim % 19] = max(cs19[tim % 19], tim)
else: # если это обычная стиралка
machines[i] = end # записываем время освобождения
tim = (end - start) # то записываем время выполнения стирки
c19[tim % 19] = max(c19[tim % 19], tim)
break # сбрасываем цикл - переходим к следующему клиенту
# считаем максимальное суммарное время кратное 19
mx_ans = c19[0] + cs19[0]
for i in range(1, 19):
mx_ans = max(mx_ans, c19[i] + cs19[19-i])
print(mx_ans)