Сервер выполняет запросы на передачу данных, при этом сведения о каждом выполненном запросе (время регистрации, идентификатор клиента, объём переданных данных) сохраняются в журнале работы, а переданные данные – в специальном разделе памяти сервера, имеющем ограниченный объём. Каждый раз, когда остаётся недостаточно свободной памяти, сервер создаёт резервную копию всех накопленных там данных, после чего освобождает раздел и продолжает выполнение запросов. Напишите программу обработки журнала работы сервера и определите идентификатор клиентского устройства, с которого на сервер был передан наибольший общий объём данных, а также сумму объёмов (в Кбайт) двух наибольших резервных копий специального раздела, созданных не позднее \(11{:}59{:}59.\)
Входные данные
Первая строка входного файла (журнала работы сервера) содержит два натуральных числа: \(N \, (N < 1~000~000)\) – количество строк в журнале и \(K \, (K < 1~000~000)\) – вместимость специального раздела памяти сервера в Кбайт. Каждая из следующих \(N\) строк содержит информацию об одном выполненном запросе: время регистрации запроса в формате ЧЧ:ММ:СС (часы, минуты, секунды) и два натуральных числа: \(C \, (C < 1~000~000)\) – идентификатор клиентского устройства и \(S \, (S < K)\) – объём данных запроса в Кбайт.
Выходные данные
В ответе запишите два числа: сначала идентификатор устройства, с которого был передан наибольший суммарный объём данных, а затем сумму объёмов (в Кбайт) двух наибольших резервных копий специального раздела, выполненных не позднее \(11{:}59{:}59.\)
Типовой пример организации данных во входном файле
\(8 \,\, 140000\)
\(01{:}01{:}01 \,\, 101 \,\, 20000\)
\(03{:}03{:}03 \,\, 202 \,\, 110000\)
\(05{:}05{:}05 \,\, 101 \,\, 90000\)
\(07{:}07{:}07 \,\, 303 \,\, 62000\)
\(10{:}10{:}10 \,\, 101 \,\, 48000\)
\(15{:}15{:}15 \,\, 202 \,\, 12000\)
\(21{:}21{:}21 \,\, 303 \,\, 120000\)
\(23{:}23{:}23 \,\, 404 \,\, 134000\)
При таких исходных данных резервное копирование специального раздела выполняется четыре раза: в \(05{:}05{:}05\) (в объёме \(130~000\) Кбайт), в \(07{:}07{:}07\) (в объёме \(90~000\) Кбайт), в \(21{:}21{:}21\) (в объёме \(122~000\) Кбайт) и в \(23{:}23{:}23\) (в объёме \(120~000\) Кбайт). Всего на сервер передано \(596~000\) Кбайт данных: \(158~000,\) \(122~000,\) \(182~000\) и \(134~000\) Кбайт от клиентов с идентификаторами \(101, \, 202, \, 303\) и \(404\) соответственно. Ответ для приведённого примера: \(303 \,\, 220~000.\)
Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемого файла.
Решение:
Python
fd = open('demo_26.txt')
N, K = map(int, fd.readline().split())
log = []
for line in fd:
T, C, S = line.split()
log.append([T, int(C), int(S)])
clients = [0] * 1_000_000
reserve = []
total = 0
for rec in log:
T, C, S = rec
clients[C] += S
if total + S > K and T < '12:00:00':
reserve.append(total)
total = S
else:
total += S
reserve.sort(reverse=True)
max_vol = max(clients)
max_id = [k for k in range(1_000_000) if clients[k] == max_vol]
print(max_id[0], sum(reserve[:2]))
Ответ: \(7040 \,\, 52204\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене