Задание EGEINFE9F6D6: Самостоятельное написание алгоритма

ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий

Открыть решение ↓ Ошибка или пожелание

Тип задачи: Самостоятельное написание алгоритма.

Учебные темы: Язык программирования (Паскаль, Python, Java, C++, C#). Типы данных: целочисленные, вещественные, символьные, логические. Ветвления. Сложные условия. Циклы с условием. Циклы по переменной. Обработка данных, хранящихся в файлах. Текстовые и двоичные файлы. Файловые переменные (файловые указатели). Чтение из файла. Запись в файл. Разбиение задачи на подзадачи. Подпрограммы (процедуры и функции). Использование стандартной библиотеки языка программирования; Обработка символьных данных. Встроенные функции языка программирования для обработки символьных строк. Алгоритмы обработки символьных строк: подсчёт количества появлений символа в строке, разбиение строки на слова по пробельным символам, поиск подстроки внутри данной строки, замена найденной подстроки на другую строку. Генерация всех слов в некотором алфавите, удовлетворяющих заданным ограничениям. Преобразование числа в символьную строку и обратно.

Дайте развернутый ответ.

На вход программе подаются сведения о пассажирах, сдавших свой багаж в камеру хранения. В первой строке задано текущее время: через двоеточие два целых числа, соответствующие часам (от 00 до 23 – ровно 2 символа) и минутам (от 00 до 59 – ровно 2 символа). Во второй строке сообщается количество пассажиров N, которое не меньше 10, но не превосходит 1000. Каждая из следующих N строк имеет следующий формат:

<Фамилия> <время освобождения ячейки>,

где <Фамилия> – строка, состоящая не более, чем из 20 символов, <время освобождения ячейки> – через двоеточие два целых числа, соответствующие часам (от 00 до 23 – ровно 2 символа) и минутам (от 00 до 59 – ровно 2 символа). <Фамилия> и <время освобождения ячейки> разделены одним пробелом. Сведения отсортированы в порядке времени сдачи багажа.

 

Требуется написать программу, выводящую фамилии пассажиров, которые в ближайшие 2 часа должны освободить ячейки, в хронологическом порядке освобождения ячеек.

Пример входных данных:

10:00

3

Иванов 12:00

Петров 10:00

Сидоров 12:12

Результат работы программы для этого примера:

Петров

Иванов


 

i
СВОЙСТВА ЗАДАНИЯ
КЭС:
3.2 Оценка сложности вычислений. Время работы и объём используемой памяти, их зависимость от размера исходных данных. Оценка асимптотической сложности алгоритмов. Алгоритмы полиномиальной сложности. Переборные алгоритмы. Примеры различных алгоритмов решения одной задачи, которые имеют различную сложность
3.3 Определение возможных результатов работы простейших алгоритмов управления исполнителями и вычислительных алгоритмов. Определение исходных данных, при которых алгоритм может дать требуемый результат
3.6 Язык программирования (Паскаль, Python, Java, C++, C#). Типы данных: целочисленные, вещественные, символьные, логические. Ветвления. Сложные условия. Циклы с условием. Циклы по переменной. Обработка данных, хранящихся в файлах. Текстовые и двоичные файлы. Файловые переменные (файловые указатели). Чтение из файла. Запись в файл. Разбиение задачи на подзадачи. Подпрограммы (процедуры и функции). Использование стандартной библиотеки языка программирования
4.1 Анализ данных. Основные задачи анализа данных: прогнозирование, классификация, кластеризация, анализ отклонений. Последовательность решения задач анализа данных: сбор первичных данных, очистка и оценка качества данных, выбор и/или построение модели, преобразование данных, визуализация данных, интерпретация результатов. Программные средства и интернет-сервисы для обработки и представления данных. Большие данные. Машинное обучение
4.2 Анализ данных с помощью электронных таблиц. Вычисление суммы, среднего арифметического, наибольшего (наименьшего) значения диапазона. Вычисление коэффициента корреляции двух рядов данных. Построение столбчатых, линейчатых и круговых диаграмм. Построение графиков функций. Подбор линии тренда, решение задач прогнозирования. Решение задач оптимизации с помощью электронных таблиц
4.3 Дискретизация при математическом моделировании непрерывных процессов. Моделирование движения. Моделирование биологических систем. Математические модели в экономике. Вычислительные эксперименты с моделями. Обработка результатов эксперимента. Метод наименьших квадратов. Оценка числовых параметров моделируемых объектов и процессов. Восстановление зависимостей по результатам эксперимента
4.4 Вероятностные модели. Методы Монте-Карло. Имитационное моделирование. Системы массового обслуживания
Тип ответа:Развернутый ответ
Номер: E9F6D6
НЕ РЕШЕНО Изменить статус

Решение задания EGEINFE9F6D6

Ответ: Программа на Python 3 приведена в решении

Решение.
Язык: Python 3. Переведём каждое время в минуты от начала суток: T = 60h + m. Текущее время обозначим now. Требуется отобрать освобождения от текущего момента до момента через 120 минут включительно. Обе границы включаются: в примере подходит и 10:00, и 12:00 при текущем 10:00.
Дата во входе отсутствует. Считаем время освобождения ближайшим таким временем не раньше текущего момента: если часы показывают меньшее время, оно наступит после ближайшей полуночи. До этого события остаётся delta = (T − now) mod 1440 минут. В Python положительный делитель 1440 даёт остаток от 0 до 1439. В обычном дневном случае это просто T − now.
Отбираем записи с delta ≤ 120. Затем сортируем их по delta, потому что именно время до освобождения задаёт хронологический порядок. Исходная сортировка относится к сдаче багажа и не гарантирует порядок освобождения. Если времена совпадают, сохраняем порядок исходных строк с помощью их номера i; условие не требует другого порядка при равенстве.
В списке храним тройки: минуты до освобождения, номер строки и фамилию. Выводим только фамилии. Одинаковые фамилии в разных записях не объединяем — это разные пассажиры.

hours, minutes = map(int, input().split(':'))
now = 60 * hours + minutes
n = int(input())
selected = []
for i in range(n):
    surname, time = input().split()
    hours, minutes = map(int, time.split(':'))
    delta = (60 * hours + minutes - now) % 1440
    if delta <= 120:
        selected.append((delta, i, surname))
selected.sort()
for delta, i, surname in selected:
    print(surname)

Проверка. В исходном примере текущее время 10:00. Для Иванова 12:00 delta = 120, для Петрова 10:00 delta = 0, для Сидорова 12:12 delta = 132. Первые двое проходят отбор; после сортировки получаем Петров, затем Иванов, каждый на своей строке. В примере дано N = 3, хотя общий предел начинается с 10; программа обрабатывает оба случая.
Проверка перехода суток. При текущем 23:30 освобождение в 00:00 наступит через 30 минут, в 01:30 — через 120 минут, в 01:31 — через 121 минуту. Первые два события включаются, третье исключается. Это не сортировка часов как обычных строк: 00:00 следует после 23:30.
Обоснование полноты. Каждая входная запись посещается один раз, и условие отбора в точности проверяет попадание ближайшего освобождения в заданные два часа. Сортировка по времени до события даёт требуемую хронологию. Время работы O(N log N), память O(N), что достаточно для N ≤ 1000.
Ответ: Программа на Python 3 приведена в решении.

Помочь улучшить сайт

Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINFE9F6D6.

Сообщение увидит только команда сайта: на странице оно не публикуется.

Комментарии к решению

Комментарии видны всем посетителям сайта.

Комментариев пока нет. Будьте первым.

Чтобы оставить комментарий, войдите или зарегистрируйтесь.