В прачечной есть K стиральных машин, которые пронумерованы с 1. Принимаемые вещи кладутся в свободную стиральную машину с минимальным номером. Известно время, когда клиенты сдают и забирают вещи (в минутах с начала суток). Среди стиральных машин есть супер-стиральные машины, они стирают вещи в два раза быстрее. У таких машин номер кратен 3. Если время стирки было нечётным, то оно округляется в меньшую сторону. Стиралка доступна для вещей, начиная со следующей минуты, после окончания срока стирки. Если свободных машинок не находится, то вещи не принимаются в стиральную машину и клиент уходит. Если в один момент пришло несколько клиентов, то в первую очередь, вещи принимаются у того, чья стирка займет большее время (без учета использования супер-сиральных машин).
Определите количество пар клиентов, которые постирают свои вещи в супер-стиральной машине при условии, что общее время стирки (с учетом ускорения стирки) кратно 8.
Входные данные:
В первой строке входного файла находится число – количество стиральных машин, во второй строке файла число
– количество клиентов, сдающих свои вещи (натуральное число, не превышающее 1000). Каждая из следующих
строк содержит два натуральных числа, не превышающих 1440: время сдачи вещей и время выдачи вещей.
Выходные данные:
Программа должна вывести одно число: количество подходящих пар клиентов.
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 # симулируем стиральные машины. В каждой ячейке будет записано время освобождения определенной стиральной машины
c8 = [0]*8 #подсчет количества стирок с различными остатками от деления на 8
for start,end in array_client: # перебор клиентов
for i in range(len(machines)): # проход по стиральным машинам
if start > machines[i]: # если текущий клиент может положить вещи в определенную стиральную машину
if (i+1) % 3 == 0: # если это супер стиралка
tim = (end - start) // 2 # то записываем время выполнения стирки в два раза быстрее
machines[i] = start + tim
c8[tim % 8] += 1
else: # если это обычная стиралка
machines[i] = end # записываем время освобождения
break # сбрасываем цикл - переходим к следующему клиенту
# считаем количество пар, в которых время стирки
# либо кратно 8, либо даёт остаток 4 при делении на 8
pair = c8[0]*(c8[0]-1) // 2 + c8[4]*(c8[4]-1) // 2
for i in range(1, 4):
#считаем пары с различными остатками от деления на 8, сумма которых равна 8
pair += c8[i]*c8[8-i]
print(pair)