Ниже приведено подробное решение задачи с пошаговым объяснением и примером.
Цель задачи
- Дан массив из 2N записей: чередуются строки с фамилиями и строки с оценками. После всех записей идёт целое число — целевой балл от 2 до 5.
- Нужно вывести массив фамилий детей, у которых оценка равна целевому баллу.
Пошаговый разбор
- Считать сначала N — количество учеников.
- Затем для каждого ученика подряд считать две строки: фамилию и её оценку (целое число).
- сохранить пары (фамилия, оценка) в списке records.
- После чтения всех 2N строк считать целевой балл target.
- Отфильтровать список records: взять только фамилии, где оценка == target.
- Вывести получившийся список фамилий в формате Python-списка, например ['Иванов', 'Силаева'].
- Временная сложность: O(N) по времени, память: O(N) для хранения пар.
- Особенности и надёжность:
- Если ни одна фамилия не подходит — выведем пустой список [].
- Все фамилии предполагаются однобуквенно-белыми строками без пробелов; если формат может быть другим, можно адаптировать парсинг под конкретный формат.
Пример решения на Python
def solve(): import sys
# Считываем построчно, чтобы сохранить порядок и разделение фамилии/оценки
lines = [line.strip() for line in sys.stdin.read().splitlines() if line.strip() != '']
if not lines:
print([])
return
idx = 0
try:
N = int(lines[idx])
except (IndexError, ValueError):
print([])
return
idx += 1
records = []
for _ in range(N):
if idx >= len(lines):
break
surname = lines[idx].strip()
idx += 1
if idx >= len(lines):
break
try:
grade = int(lines[idx].strip())
except ValueError:
grade = None
idx += 1
records.append((surname, grade))
# Целевой балл — следующий непустой токен
target = None
while idx < len(lines):
try:
target = int(lines[idx].strip())
break
except ValueError:
idx += 1
continue
if target is None:
print([])
return
result = [s for s, g in records if g == target]
print(result)
Пример использования с данными из задачи
Ввод: 4 Васильев 5 Иванов 4 Петров 3 Силаева 4
Вывод: ['Иванов', 'Силаева']
Объяснение примера
- N = 4
- Записи по парам: (Васильев, 5), (Иванов, 4), (Петров, 3), (Силаева, 4)
- Целевой балл = 4
- Среди пар совпадают Иванов и Силаева, значит выведем ['Иванов', 'Силаева'].
Если нужна версия на другом языке программирования (например, JavaScript, Java, C++), или нужна более компактная версия кода, скажите — адаптирую под ваш язык. Также могу дополнительно разобрать альтернативные подходы или привести тесты.