Задача ясна: прочитав N, затем 2N строк (имя ученика и его оценку на следующей строке), затем последнюю строку с grade, нужно вывести массив имен учеников, у которых оценка равна grade.
Пошаговый подход:
- Считать N.
- Для i от 1 до N считать две строки: имя (строка с фамилией и именем) и оценку (целое число).
- Сохранить пары (имя, оценка).
- Прочитать целевую оценку grade (целое число).
- Отфильтровать имена по условию оценка == grade.
- Вывести результат в виде списка Python, например: ['Петров Пётр', 'Сонина Софья'].
Сложность: время O(N), память O(N) из-за хранения пар.
Код (Python 3):
import sys
def main():
data = [line.rstrip('\n') for line in sys.stdin]
if not data:
print([])
return
it = iter(data)
try:
N = int(next(it).strip())
except StopIteration:
print([])
return
records = []
for _ in range(N):
# имя ученика
name = next(it).strip()
# оценка
grade_line = next(it).strip()
g = int(grade_line)
records.append((name, g))
try:
target = int(next(it).strip())
except StopIteration:
# если последняя строка с grade не дана, вернуть пустой массив
print([])
return
result = [name for (name, g) in records if g == target]
print(result)
if __name__ == "__main__":
main()
Примеры использования:
Ввод: 3 Петров Пётр 4 Александрова Александра 5 Сонина Софья 4 4 Вывод: ['Петров Пётр', 'Сонина Софья']
Ввод: 3 Петров Пётр 4 Александрова Александра 5 Сонина Софья 4 3 Вывод: []
Если хочешь, могу адаптировать решение под другой язык программирования или под иной формат ввода/вывода.