Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3474130
А
Аноним
20 октября 2025 16:34 · публичный вопрос
А
Аноним

Есть число N и 2N записей: имя в одной строке, оценка за урок в другой. Некоторые ученики отвечали несколько раз и потому попали в список тоже несколько раз. Выведи самую низкую…

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

Есть число N и 2N записей: имя в одной строке, оценка за урок в другой. Некоторые ученики отвечали несколько раз и потому попали в список тоже несколько раз. Выведи самую низкую оценку из тех, которые получил последний ученик в списке. Ввод Вывод 4 Петров Пётр 4 Сонина Софья 4 Александрова Александра 5 Сонина Софья 3 3

Ответ нейросети
20 октября 2025 16:34

Краткое пояснение задачи

  • Вводится N и далее N пар: имя ученика (одной строкой) и его оценка за урок (следующая строка с числом).
  • Последний ученик в списке — это имя из последней пары.
  • Нужно взять все записи с этим именем и вывести минимальную оценку среди них.

Например из примера:

  • Последний ученик: "Сонина Софья"
  • Её записи: 4, 3
  • Минимальная оценка: 3

Пошаговый алгоритм

  1. Прочитать N.
  2. Прочитать N пар (name_i, grade_i) и сохранить их в список.
  3. last_name = name_N (имя последнего ученика).
  4. Найти минимальную grade среди всех пар, где name == last_name.
  5. Вывести найденное минимальное значение.

Сложность

  • Время: O(N)
  • Память: O(N) (храним все пары)

Примечание по реализации

  • Поскольку имя последнего ученика неизвестно до конца ввода, две-pass подход не обходится без хранения записей. В данной реализации мы сохраняем пары, затем вычисляем минимум для нужного имени.

Пример кода (Python)

import sys

def main():
    data = sys.stdin.read().splitlines()
    if not data:
        return

    N = int(data[0].strip())
    pairs = []
    idx = 1
    for _ in range(N):
        name = data[idx].rstrip('\n')
        idx += 1
        grade = int(data[idx].strip())
        idx += 1
        pairs.append((name, grade))

    last_name = pairs[-1][0]
    min_grade = None
    for name, g in pairs:
        if name == last_name:
            if (min_grade is None) or (g < min_grade):
                min_grade = g

    print(min_grade)

if __name__ == "__main__":
    main()

Пояснение к примеру

  • Ввод: N=4, пары: (Петров Пётр, 4), (Сонина Софья, 4), (Александрова Александра, 5), (Сонина Софья, 3)
  • Последний ученик: Сонина Софья
  • Её оценки: 4, 3
  • Вывод: 3

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