Бесплатный урок с нашим репетитором!

Узнать подробнее

Новая Школа - онлайн-школа подготовки к ЕГЭ
При поддержке
Посмотреть все вопросы нейросети
Бесплатный пробный урок с репетитором

Узнай больше про репетиторов Новой Школы и запишись на бесплатный пробный урок. Мы проверим твой уровень знаний и составим план обучения по любому предмету и классу

Вопрос от Анонимного юзера 28 апреля 2026 12:45

Задача 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() к строкам имен.

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

Задай свой вопрос

Напиши любую задачу или вопрос, а нейросеть её решит

Похожие вопросы 15

Бесплатно Мобильное приложение ГДЗ
Мобильное приложение ГДЗ

Задавай вопросы искуcственному интеллекту текстом или фотографиями в приложении на iPhone или Android

qr-codegoogle-playapp-store

Саша — ассистент в телеграмме

Задача 2 Дано число N, затем 2N записей: фамилия и имя ученика в одной строке, оценка во второй. Некоторые ученики отвечали несколько раз, поэтому в списке у них несколько оценок. Выведи самую высокую оценку из тех, которые получил последний ученик в списке.
Ниже подробное решение задачи. Цель задачи - Найти максимально возможную оценку 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() к строкам имен. Если нужно, могу адаптировать решение под конкретный язык программирования или привести ещё один пример с пошаговым выводом на конкретных данных.