Задача к ЕГЭ по информатике на тему «Распределение объектов по местам (хранение багажа, парковки, кафе, гостиницы)» №4

В прачечной есть K стиральных машин, которые пронумерованы с 1. Принимаемые вещи кладутся в свободную стиральную машину с минимальным номером. Известно время, когда клиенты сдают и забирают вещи (в минутах с начала суток). Среди стиральных машин есть супер-стиральные машины, они стирают вещи в 1.5 раза быстрее. У таких машин номер кратен 7. Если время стирки в супер-стиральной машине получилось не целым, то оно округляется до целого числа в меньшую сторону. Стиральная машина доступна для вещей, начиная со следующей минуты, после окончания срока стирки. Если свободных машинок не находится, то вещи не принимаются в стиральную машину и клиент уходит. Если в один момент пришло несколько клиентов, то в первую очередь, вещи принимаются у того, чья стирка займет большее время (без учета использования супер-стиральных машин).

Определите максимальное суммарное время стирки пары клиентов, таких что один клиент из пары постирал вещи в обычной машинке, а второй в супер-стиральной машине, при этом суммарное время должно быть кратно 19.

Входные данные:

В первой строке входного файла находится число K  – количество стиральных машин, во второй строке файла число N  – количество клиентов, сдающих свои вещи (натуральное число, не превышающее 1000). Каждая из следующих N  строк содержит два натуральных числа, не превышающих 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)

Ответ: 2223
Оцените статью
Я решу все!