К содержанию

Задание 26 · Обработка данных с сортировкой

Практика и итог

Вся тема на одной странице: как решилась задача темы, главное из подтем, порядок решения и частые ошибки.

Одна задача — вся тема

Задача темы — камера хранения: сколько пассажиров сдадут багаж и в какую ячейку положит последний — читается как в подтеме 1, а решается в подтеме 6 исполнением правил. Пролистай версии: точками отмечены строки, которых не было в предыдущей.

  1. Подтема 1, «Записи и сортировка»: записи — кортежи, порядок прихода. Точками отмечены новые строки.
  2. Подтема 6, «Состояние процесса»: что помнить: время каждой ячейки.
  3. Подтема 6, «Правило дословно»: наименьший номер, строго раньше. Ответ задачи темы — 859 11.

Записи и сортировка нужны всем задачам темы. Где выбирают лучшее — работает жадный выбор (подтема 2), цепочки и пары (3), серии в рядах (4) и интервалы (5); где правила заданы — их исполняют дословно, как здесь. Дополнительный урок добавляет окно, кучу и сложные цепочки.

Карта темы

Каждая подтема дала свой приём для одного прохода по записям, и любое решение собирается из них. Сверху — путь от файла к ответу, ниже — по блоку на подтему. Заголовок блока ведёт на подтему.

  1. Файлпо описанию формата
  2. Записисортировка по ключу
  3. Проходвыбрать лучшее или исполнить правила

1Записи, сортировка и рейтинг

  • записькортеж полей одного объекта
  • key=lambda r: (-r[1], r[0])минус — «больше выше», второе поле — при равенстве

2Жадный выбор

  • больше всегобрать от самых маленьких
  • второй критерийзакрепить количество, потом улучшать

3Цепочки коробок и пары

  • матрёшкабрать самую большую подходящую
  • парыдва указателя с концов

4Ряды, серии и группы

  • свободно междуb − a − 1 мест
  • последняя серияучесть после цикла

5Интервалы и события

  • мероприятиябрать по раннему окончанию
  • нагрузкасобытия +1 и −1 по времени

6Моделирование процесса

  • free_atкогда освободится каждая ячейка
  • правилодословно: «со следующей минуты» — строго <

7Пары, окно и сложные цепочкидополнительный урок

  • окнолевая граница догоняет правую
  • кучабыстро достаёт наименьшее
Карта темы: путь к ответу сверху и главное из каждой подтемы. Номер блока — номер подтемы.

Как решать

Любое задание 26 решается одним порядком из пяти шагов. Каждому шагу ты уже учился — под ним номера подтем:

Главный шаг — понять, выбирать ли лучшее самому или исполнять правила условия. Проверка — пять-шесть объектов на бумаге: так камеру хранения проверили на двух ячейках.

Если ответ — два числа, проверь второе отдельно: оно часто считается другим приёмом, чем первое.

Частые ошибки

Шесть ошибок встречаются чаще других, и каждую ловит один вопрос к себе. Выбери ошибку — увидишь, как её исправить, и вопрос, который её ловит:

заголовок как данные
количество объектов прочитано как объект → первые строки — заголовок. Спроси себя: совпадает ли длина списка с N из файла?подтема 1
поля по отдельности
начала и окончания отсортированы раздельно → сортируют записи целиком. Спроси себя: есть ли каждая запись в исходных данных?подтема 1
break без сортировки
цикл остановлен на первом неподходящем → сначала сортировка, потом break. Спроси себя: а если маленький объект стоит в конце?подтема 2
второй критерий сразу
сразу выбран наибольший объект → закрепить количество, потом улучшать. Спроси себя: не стало ли объектов меньше?подтема 2
последняя серия
серия в конце ряда не учтена → проверка ещё раз после цикла. Спроси себя: что, если ряд кончается серией?подтема 4
та же минута
free_at[i] <= start → free_at[i] < start. Спроси себя: можно ли занять ячейку в минуту освобождения?подтема 6

Итог

Тема пройдена: задача темы решена от чтения файла до ответа 859 11. Вот что взять с собой.

  • ПорядокЗаписи, порядок, способ, проход, проверка.
  • ЗаписиКортежи и сортировка по ключу.
  • ВыборЖадно: от маленьких, по раннему окончанию, указатели.
  • ПравилаИсполняются дословно — «со следующей минуты» строго.
  • Задача темы859 пассажиров, последний — в ячейке 11.

Проверьте себя

Ответь сначала сам, потом открой ответ.

Вопрос 1

Нужно сохранить на диск как можно больше файлов. В каком порядке их брать?

ОтветСкрыть ответ
Ответ

От самых маленьких: каждый маленький оставляет больше места остальным.

Вопрос 2

Ячейка освободилась в минуту 404. Можно ли положить в неё багаж в 404? А в 405?

ОтветСкрыть ответ
Ответ

В 404 нельзя — только со следующей минуты, поэтому в программе free_at[i] < start. В 405 можно.

Вопрос 3

Почему заявки задачи темы сортируют перед проходом?

ОтветСкрыть ответ
Ответ

Пассажиров обслуживают в порядке прихода, а в файле заявки перемешаны: requests.sort() упорядочивает их по времени сдачи.

Вопрос 4

Места в ряду заняты под номерами 3 и 8. Сколько свободных мест между ними?

ОтветСкрыть ответ
Ответ

8 − 3 − 1 = 4: места 4, 5, 6 и 7.

Практика

Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.

Свободные кресла перед местом

В файле 26-8.txt в первой строке записаны количество занятых мест N, число рядов M и число мест в каждом ряду K, в каждой следующей — номер ряда и номер занятого места. Ряды нумеруются от сцены. Нужно купить билет на свободное место, перед которым (в рядах с меньшими номерами) как можно больше идущих подряд свободных кресел с тем же номером места. Если подходящих мест несколько, выбирают ряд ближе к сцене. Запиши номер ряда, затем количество свободных кресел перед выбранным местом. (Подтема 4.)

26-8.txtЗанятые места: ряд и местоТекстовый файл · 69,9 КБ

Введите два числа через пробел в том порядке, в каком их спрашивают.

Самое позднее окончание

В файле 26-10.txt в первой строке записано количество заявок N, в каждой следующей — время начала и время окончания мероприятия в минутах от начала суток. Следующее мероприятие можно начать в момент окончания предыдущего. Определи максимальное количество мероприятий, которые можно провести, и самое позднее время окончания последнего мероприятия при таком количестве. (Подтема 5.)

26-10.txtЗаявки: начало и окончание в минутахТекстовый файл · 8,3 КБ

Введите два числа через пробел в том порядке, в каком их спрашивают.

Скидка на каждый второй

В файле 26-5.txt в первой строке записано количество товаров N, в каждой следующей — цена товара в рублях. На каждый второй товар дороже 1000 рублей предоставляется скидка 20 %; порядок товаров в чеке определяет продавец так, чтобы общая скидка была наименьшей; итоговая стоимость покупки округляется вверх до целого числа рублей. Запиши итоговую стоимость, затем цену самого дорогого товара, на который предоставлена скидка. (Подтема 2.)

26-5.txtЦены товаровТекстовый файл · 14,1 КБ

Введите два числа через пробел в том порядке, в каком их спрашивают.

Матрёшка изнутри наружу

В файле 26-6.txt в первой строке записано количество коробок N, в каждой следующей — длина стороны коробки. Одну коробку можно вложить в другую, если её сторона хотя бы на 10 меньше. Определи наибольшее количество коробок в одной «матрёшке» и наименьшую возможную сторону самой большой коробки при таком количестве. (Подтема 3.)

26-6.txtСтороны коробокТекстовый файл · 47,8 КБ

Введите два числа через пробел в том порядке, в каком их спрашивают.

Контейнеры по 250

В файле 26-3.txt в первой строке записаны два числа, из которых нужно только второе — количество грузов N, в каждой следующей — масса груза. Контейнеры вместимостью 250 заполняют так: грузы перебирают по убыванию массы и кладут в контейнер каждый, который ещё помещается; затем то же повторяют для оставшихся грузов со следующим контейнером. Определи количество контейнеров и загрузку предпоследнего контейнера. (Подтема 6.)

26-3.txtОбъём диска, количество и размеры файловТекстовый файл · 14,3 КБ

Введите два числа через пробел в том порядке, в каком их спрашивают.