Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3608145
А
Аноним
28 апреля 2026 12:45 · публичный вопрос
А
Аноним

Задача 2 Дано число N, затем 2N записей: фамилия и имя ученика в одной строке, оценка во второй. Некоторые ученики отвечали несколько раз, поэтому в списке у них несколько оценок.…

Запрос пользователя

Задача 2 Дано число N, затем 2N записей: фамилия и имя ученика в одной строке, оценка во второй. Некоторые ученики отвечали несколько раз, поэтому в списке у них несколько оценок. Выведи самую высокую оценку из тех, которые получил последний ученик в списке.

Ответ нейросети
28 апреля 2026 12:45

Ниже подробное решение задачи.

Цель задачи

  • Найти максимально возможную оценку among all оценки, которые получил последний ученик в списке.

Пояснение задачи

  • Вход: сначала число N. Затем идут 2N строк:
    • строка 1: фамилия и имя ученика
    • строка 2: оценка (целое число)
  • У одного ученика может быть несколько записей (они отвечали несколько раз). Нужно взять только записи именно последнего ученика в списке (то есть того, чья строка с именем находится в позиции N) и найти максимальную из всех его оценок.

Алгоритм решения

  1. Читаем N.
  2. Создаем словарь max_by_student, где key — строка "Фамилия Имя", значение — максимальная полученная эта строка оценка.
  3. Проходим по i от 1 до N:
    • читаем строку имени name
    • читаем строку с оценкой, преобразовав её к целому числу grade
    • обновляем max_by_student[name] = max(previous_value, grade)
    • запоминаем last_student = name (это будет имя последнего ученика в списке)
  4. После цикла выводим 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() к строкам имен.

Если нужно, могу адаптировать решение под конкретный язык программирования или привести ещё один пример с пошаговым выводом на конкретных данных.