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

Дано число N и 2N записей: в одной строке фамилия ученика, а в другой — его оценка. После информации об оценках записан балл — число от 2 до 5. Выведи массив с фамилиями детей,…

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

Дано число N и 2N записей: в одной строке фамилия ученика, а в другой — его оценка. После информации об оценках записан балл — число от 2 до 5. Выведи массив с фамилиями детей, которые получили такой балл. Ввод Вывод 4 Васильев 5 Иванов 4 Петров 3 Силаева 4 4 ['Иванов', 'Силаева']

Ответ нейросети
03 февраля 2026 09:12

Ниже приведено подробное решение задачи с пошаговым объяснением и примером.

Цель задачи

  • Дан массив из 2N записей: чередуются строки с фамилиями и строки с оценками. После всех записей идёт целое число — целевой балл от 2 до 5.
  • Нужно вывести массив фамилий детей, у которых оценка равна целевому баллу.

Пошаговый разбор

  1. Считать сначала N — количество учеников.
  2. Затем для каждого ученика подряд считать две строки: фамилию и её оценку (целое число).
    • сохранить пары (фамилия, оценка) в списке records.
  3. После чтения всех 2N строк считать целевой балл target.
  4. Отфильтровать список records: взять только фамилии, где оценка == target.
  5. Вывести получившийся список фамилий в формате Python-списка, например ['Иванов', 'Силаева'].
  6. Временная сложность: O(N) по времени, память: O(N) для хранения пар.
  7. Особенности и надёжность:
    • Если ни одна фамилия не подходит — выведем пустой список [].
    • Все фамилии предполагаются однобуквенно-белыми строками без пробелов; если формат может быть другим, можно адаптировать парсинг под конкретный формат.

Пример решения на 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++), или нужна более компактная версия кода, скажите — адаптирую под ваш язык. Также могу дополнительно разобрать альтернативные подходы или привести тесты.