ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий
Тип задачи: Сортировка, отбор и моделирование.
| КЭС: | 3.10 Массивы и последовательности чисел. Вычисление обобщённых характеристик элементов массива или числовой последовательности (суммы, произведения, среднего арифметического, минимального и максимального элементов, количества элементов, удовлетворяющих заданному условию). Линейный поиск заданного значения в массиве. Алгоритмы работы с элементами массива с однократным просмотром массива. Сортировка одномерного массива. Простые методы сортировки (метод пузырька, метод выбора, сортировка вставками). Сортировка слиянием. Быстрая сортировка массива (алгоритм QuickSort). Двоичный поиск в отсортированном массиве |
| Тип ответа: | Краткий ответ |
Ответ: 45539 127
Решение.
Сохраним приложенный текстовый файл под именем data.txt. Первая строка задаёт параметры задачи; её нельзя считать обычной записью данных. В программе нумерация элементов списка начинается с нуля, а номера из условия сохраняются без сдвига.
В файле 9996 кандидатов и 1076 мест. Сумма рейтинга включает все четыре результата, в том числе собеседование. Сортируем по убыванию суммы, затем по убыванию результата собеседования, затем по возрастанию ID.
Зачисление рассматриваем от начала этого рейтинга, как указано в правиле убывания суммы и показано в примере условия. Кандидатов с одинаковой суммой объединяем в группы. Пока вся следующая группа помещается в оставшиеся места, зачисляем её целиком.
Последняя целиком помещающаяся группа задаёт проходной балл. Первый ответ — ID последнего кандидата именно этой группы с учётом собеседования и ID. Если после неё остались места, но следующая группа целиком не помещается, её сумма полупроходная. Во втором ответе нужно количество всех кандидатов этой группы, включая тех, кому мест не хватило.
Если граница мест совпала с концом группы, полупроходного балла нет и второе число равно 0. Нельзя автоматически считать последнего зачисленного кандидата последним с проходным баллом: он может принадлежать частично зачисленной группе. Сортировка O(N log N), проход по группам O(N), память O(N).
Полная программа на Python:
from itertools import groupby
with open("data.txt", encoding="utf-8-sig") as f:
n, places = map(int, f.readline().split())
people = [list(map(int, f.readline().split())) for _ in range(n)]
people.sort(key=lambda row: (-sum(row[1:]), -row[4], row[0]))
admitted = 0
last_passing = None
semi_count = 0
for score, iterator in groupby(people, key=lambda row: sum(row[1:])):
group = list(iterator)
if admitted + len(group) <= places:
admitted += len(group)
last_passing = group[-1][0]
else:
if admitted < places:
semi_count = len(group)
break
print(last_passing, semi_count)Проверка результата.
Целиком зачислено 955 кандидатов; проходная сумма 280. Последний кандидат этой суммы имеет запись 45539, 95, 95, 90, 0. Следующая группа имеет сумму 279 и состоит из 127 кандидатов; оставшихся 121 мест на всю группу не хватает.
Ответ: 45539 127.
Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINFEB601E.
Сообщение увидит только команда сайта: на странице оно не публикуется.
Комментарии к решению
Комментарии видны всем посетителям сайта.
Комментариев пока нет. Будьте первым.
Чтобы оставить комментарий, войдите или зарегистрируйтесь.