Контрольная по ударениям
Известное слово проверяем по словарю вариантов, неизвестное — по числу заглавных букв.
Как к ней подойти
Потренируйтесь хранить пары «ключ - значение» и находить нужные записи в словаре.
Словарь связывает ключ со значением и позволяет быстро найти запись по ключу. Решите, что будет ключом, что значением и как обрабатывать отсутствующую запись. Для подсчётов удобно начинать с нуля.
Множество 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).