На мелкосерийном производстве деталей существуют цех фрезеровки и цех окраски. После фрезеровки деталь направляется в окрасочный цех для порошковой окраски и запекания, каждая деталь отправляется в порядке общей очереди.
В цехе окраски расположено некоторое количество камер, в которых размещаются детали для запекания. Все камеры пронумерованы, нумерация начинается с единицы. На запекание детали каждой детали отводится некоторое количество секунд. Деталь располагается в свободной камере с наименьшим номером, извлечение происходит в течение 1 секунды. Если на момент прибытия детали все камеры заняты, деталь отправляется на склад.
Определите, какое количество пар деталей было окрашено (запечено в камерах) в течение дня при условии, что общее время окраски этих деталей кратно 60 (составляет целое число минут).
Входные данные. В первой строке входного файла находится натуральное число , не превышающее 1 000 000 – количество отфрезерованных деталей. Во второй строке – натуральное число
, не превышающее 1000 – количество покрасочных камер. Каждая из следующих
строк содержит два натуральных числа, каждое из которых не превышает 86400: время размещения детали в камере для запекания и время извлечения (в секундах от начала суток).
Запишите в ответе одно число: количество пар деталей, время окраски которых кратно 60.
f = open(’E:/26-27.txt’)
n = int(f.readline())
k = int(f.readline())
a = sorted([list(map(int, i.split())) for i in f])
ch = [[] for i in range(k)] #список с камерами для запекания
c60 = [0]*60 #подсчет количества деталей с различными остатками от деления на 60
for i in a: #перебор деталей
for j in range(k): #проход по камерам для запекания в поисках свободной камеры
if (not ch[j]) or (i[0] > ch[j][-1][1]):
ch[j].append(i) #добавляем деталь в камеру
tim = i[1]-i[0] #время запекания детали
c60[tim % 60] += 1 #подсчитываем это время запекания
break
pair = c60[0]*(c60[0]-1) // 2 + c60[30]*(c60[30]-1) // 2 #считаем количество пар, в которых время запекания детали либо кратно 60, либо даёт остаток 30 при делении на 60
for i in range(1, 30):
pair += c60[i]*c60[60-i] #считаем пары с различными остатками от деления на 60, сумма которых равна 60
print(pair)