Все задачи №26
№26

Два наименьших объёма и две последние копии

Сервер выполняет запросы на передачу данных, при этом сведения о каждом выполненном запросе (время регистрации, идентификатор клиента, объём переданных данных) сохраняются в журнале работы, а переданные данные – в специальном разделе памяти сервера, имеющем ограниченный объём. Каждый раз, когда остаётся недостаточно свободной памяти, сервер создаёт резервную копию всех накопленных там данных, после чего освобождает раздел и продолжает выполнение запросов. Напишите программу обработки журнала работы сервера и определите сумму идентификаторов двух клиентских устройств, с которых на сервер был передан наименьший общий объём данных, а также сумму объёмов (в Кбайт) двух последних по времени резервных копий специального раздела, выполненных не позднее 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 соответственно. Ответ для приведённого примера: 606 220 000. Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемого файла.

Источник: ФИПИ (Пересдача 08.07.2026), № 31370

Скачать файл: task_31370_A.txt. В редакторе он уже лежит рядом с кодом, открывай как на экзамене: open('task_31370_A.txt').

Ответвпиши то, что вывела программа
Показать разбор
  1. Прочитай k и строки журнала, отсортируй их по времени.
  2. Для каждого клиента копи общий объём в словаре.
  3. Держи накопленный объём: если новый запрос не помещается, запиши копию и обнули накопленное.
  4. Первое число: сумма номеров двух клиентов с наименьшими объёмами.
  5. Второе: сумма двух последних копий до 11:59:59.
log = []
f = open('task_31370_A.txt')
n, k = map(int, f.readline().split())
for line in f:
    t, c, s = line.split()
    log.append((t, int(c), int(s)))
log.sort()

total = {}
copies = []
acc = 0
for t, c, s in log:
    total[c] = total.get(c, 0) + s
    if acc + s > k:
        copies.append((t, acc))
        acc = 0
    acc += s

good = [v for t, v in copies if t <= '11:59:59']
two = sorted(total.items(), key=lambda x: x[1])[:2]
print(two[0][0] + two[1][0], sum(good[-2:]))