Задача 2 Дано число N, затем 2N записей: фамилия и имя ученика в одной строке, оценка во второй. Некоторые ученики отвечали несколько раз, поэтому в списке у них несколько оценок. Выведи самую высокую оценку из тех, которые получил последний ученик в списке.
Ответ нейросети
28 апреля 2026 12:45
Ниже подробное решение задачи.
Цель задачи
- Найти максимально возможную оценку among all оценки, которые получил последний ученик в списке.
Пояснение задачи
- Вход: сначала число N. Затем идут 2N строк:
- строка 1: фамилия и имя ученика
- строка 2: оценка (целое число)
- У одного ученика может быть несколько записей (они отвечали несколько раз). Нужно взять только записи именно последнего ученика в списке (то есть того, чья строка с именем находится в позиции N) и найти максимальную из всех его оценок.
Алгоритм решения
- Читаем N.
- Создаем словарь max_by_student, где key — строка "Фамилия Имя", значение — максимальная полученная эта строка оценка.
- Проходим по i от 1 до N:
- читаем строку имени name
- читаем строку с оценкой, преобразовав её к целому числу grade
- обновляем max_by_student[name] = max(previous_value, grade)
- запоминаем last_student = name (это будет имя последнего ученика в списке)
- После цикла выводим max_by_student[last_student] — это максимальная оценка последнего ученика во всём списке.
Анализ сложности
- Время: O(N) — читаем 2N строк и делаем константные операции для каждого.
- Память: O(U) — где U количество уникальных учеников в списке (нужны только максимальные значения по каждому ученику).
Пример Пример 1: Ввод: 4 Иванов Иван 5 Петров Петр 4 Иванов Иван 3 Сидоров Сергей 5
Последний ученик: "Сидоров Сергей" — у него одна запись с оценкой 5. Ответ: 5.
Пример 2 (нагляднее иллюстрирует “несколько оценок у последнего”): Ввод: 4 Иванов Иван 5 Петров Петр 4 Иванов Иван 4 Иванов Иван 2
Последний ученик: "Иванов Иван". Его оценки: 5, 4, 2. Максимальная — 5. Ответ: 5.
Пример кода на Python 3
Вход читаем построчно из стандартного ввода
import sys
def main(): data = sys.stdin.read().strip().splitlines() if not data: return it = iter(data) N = int(next(it).strip()) max_by = {} last_student = None for _ in range(N): name = next(it).rstrip("\n") # предполагаем, что следующая строка — это оценка grade_line = next(it).strip() try: grade = int(grade_line) except ValueError: # на случай некорректного ввода: попытаться распарсить как float и привести к int grade = int(float(grade_line)) if name in max_by: if grade > max_by[name]: max_by[name] = grade else: max_by[name] = grade last_student = name
# В случае, если список пустой (N=0) — защитимся
if last_student is None:
print()
return
print(max_by[last_student])
if name == "main": main()
Замечания
- В реальном тестировании используйте корректное чтение входа (например, через input() в цикле), если задача подразумевает построчное считывание.
- Если у студентов одинаковые имена и фамилии встречаются у разных людей, может потребоваться учитывать уникальный идентификатор человека. В рамках данной формулировки предполагаем, что полное имя использует как уникальный ключ.
- Если вход может содержать лишние пробелы, полезно применять strip() к строкам имен.
Если нужно, могу адаптировать решение под конкретный язык программирования или привести ещё один пример с пошаговым выводом на конкретных данных.
Понравился ответ?
Задай свой вопрос
Напиши любую задачу или вопрос, а нейросеть её решит



