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