Информатика: ОГЭ и ЕГЭ

Разборы · ЕГЭ, задание 26

Задание 26 ЕГЭ по информатике: обработка данных и моделирование

Что проверяет задание

В задании 26 дан большой файл с данными (журнал, список заказов, грузов), и нужно смоделировать процесс: заполнение склада, раздела памяти, очереди. В ответе два числа. Это одно из двух заданий, оцениваемых в 2 балла: 2 балла — оба числа верны; 1 балл — числа верны, но перепутаны местами, или верно только одно число на своём месте. Всего на экзамене 29 первичных баллов за 27 заданий и 3 часа 55 минут, так что на 26 и 27 стоит оставить минимум час.

Что нужно знать

Как решать

  1. Внимательно разберите типовой пример из условия и проверьте программу на нём — там ответ известен.
  2. Смоделируйте процесс строго по тексту: что происходит, когда очередной запрос не помещается.
  3. Ответьте на оба вопроса. Если второй не получается, запишите хотя бы первое число на своё место — это 1 балл.

Пример из демоверсии 2027

Сервер записывает данные запросов в раздел памяти объёмом K Кбайт. Когда очередной запрос не помещается, сервер делает резервную копию всех накопленных данных, очищает раздел и продолжает. В журнале — время, ID клиента и объём каждого запроса. Найдите ID клиента, передавшего наибольший общий объём, и сумму объёмов двух наибольших резервных копий, созданных не позднее 11:59:59.

f = open("26.txt")
n, k = map(int, f.readline().split())
log = []
for _ in range(n):
    t, client, size = f.readline().split()
    h, m, s = map(int, t.split(":"))
    log.append((h * 3600 + m * 60 + s, int(client), int(size)))
log.sort(key=lambda r: r[0])                  # по времени

total = {}
used = 0
backups = []                                  # (время копии, объём)
for t, client, size in log:
    total[client] = total.get(client, 0) + size
    if used + size > k:                       # не помещается — копия и очистка
        backups.append((t, used))
        used = 0
    used += size

top = max(total, key=total.get)
limit = 11 * 3600 + 59 * 60 + 59
early = sorted((v for t, v in backups if t <= limit), reverse=True)
print(top, early[0] + early[1])

На типовом примере из условия (K = 140 000, восемь запросов) программа выдаёт 303 220000 — как в условии. Для файла демоверсии ответ — 7040 52204.

Внимание: файл демоверсии 2027 по формату не совпадает с описанием: это выгрузка таблицы в кодировке Windows-1251, первая строка — заголовки столбцов, а вместимость раздела K записана во второй строке после слова «диск». Перед решением всегда открывайте файл и смотрите на первые строки глазами, а чтение подстраивайте под то, что видите.

Типичные ошибки

Потренироваться: задание 26 новые варианты с проверкой ответа

Подготовиться с репетитором

На занятиях разбираем каждое задание в формате экзамена и отрабатываем его на тренажёрах с проверкой по критериям.

Записаться на пробное занятие

Другие разборы