Мини-урок · перед практикой

Контрольная по ударениям

Известное слово проверяем по словарю вариантов, неизвестное — по числу заглавных букв.

Как к ней подойти

Потренируйтесь хранить пары «ключ - значение» и находить нужные записи в словаре.

Коротко о теме

Словарь связывает ключ со значением и позволяет быстро найти запись по ключу. Решите, что будет ключом, что значением и как обрабатывать отсутствующую запись. Для подсчётов удобно начинать с нуля.

Ключевая идея · Два множества

Множество known определяет наличие слова в словаре независимо от ударения, valid содержит разрешённые написания.

Проверьте перед запуском

  • Для известного слова одной заглавной буквы недостаточно.
  • У одного слова может быть несколько разрешённых ударений.

Сравните свой подход

Ниже - готовое решение, другой способ, если он есть, и важные детали проверки.

Ваше принятое решение

Рекомендуемое решение: Два множества

Множество known определяет наличие слова в словаре независимо от ударения, valid содержит разрешённые написания.

n = int(input())
valid = {input() for _ in range(n)}
known = {word.lower() for word in valid}
errors = 0
for word in input().split():
    if word.lower() in known:
        errors += word not in valid
    else:
        errors += sum(c.isupper() for c in word) != 1
print(errors)

Время: Ожидаемое O(D + T), D и T — число символов словаря и текста. Память: O(D + T), включая строку упражнения и split.

Другой способ: Словарь разрешённых позиций

Вместо целых вариантов сохраняем индексы допустимых ударений. Ровно одна заглавная буква обязательна в любом случае.

n = int(input())
positions = {}
for _ in range(n):
    word = input()
    index = next(i for i, c in enumerate(word) if c.isupper())
    positions.setdefault(word.lower(), set()).add(index)
errors = 0
for word in input().split():
    stress = [i for i, c in enumerate(word) if c.isupper()]
    if len(stress) != 1:
        errors += 1
    elif word.lower() in positions and stress[0] not in positions[word.lower()]:
        errors += 1
print(errors)

Время: Ожидаемое O(D + T). Память: O(D + T).