Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // КОНТРОЛЬНАЯ ПО УДАРЕНИЯМ
- /*
- Учительница задала Пете домашнее задание — в заданном тексте расставить
- ударения в словах, после чего поручила Васе проверить это домашнее задание.
- Вася очень плохо знаком с данной темой, поэтому он нашел словарь, в котором
- указано, как ставятся ударения в словах. К сожалению, в этом словаре
- присутствуют не все слова. Вася решил, что в словах, которых нет в словаре,
- он будет считать, что Петя поставил ударения правильно, если в этом слове
- Петей поставлено ровно одно ударение.
- Оказалось, что в некоторых словах ударение может быть поставлено больше,
- чем одним способом. Вася решил, что в этом случае если то, как Петя
- поставил ударение, соответствует одному из приведенных в словаре вариантов,
- он будет засчитывать это как правильную расстановку ударения, а если не
- соответствует, то как ошибку.
- Вам дан словарь, которым пользовался Вася и домашнее задание, сданное Петей.
- Ваша задача — определить количество ошибок, которое в этом задании
- насчитает Вася
- */
- #include <iostream>
- #include <string>
- #include <map>
- #include <set>
- using namespace std;
- int main ()
- {
- int n, score = 0; // score — счёт ошибок
- cin >> n;
- /*
- ЗДЕСЬ НЕ ТРЕБУЕТСЯ ПРОВЕРЯТЬ n < 1
- ДАЖЕ ПРИ ПУСТОМ СЛОВАРЕ ВАСЯ ОБЯЗАН ПРОВЕРИТЬ КОЛИЧЕСТВО УДАРЕНИЙ ПОСТАВЛЕННЫХ ПЕТЕЙ!!!
- */
- map <string, set <string>> thesa; //словарь с образцом и омографами
- //Заполняем словарь
- string term, sample; // слово и его приведённый образец
- for (; n > 0; --n) // n больше не используется, можно пожертвовать!
- {
- cin >> term;
- sample = "";
- for (auto c : term) // формируется образец слова
- sample += (char)(c | 32);
- thesa [sample].insert (term);// добавить образец и его омограф
- }
- //Обрабатываем упражнение Пети
- while (cin >> term)
- {
- // приведение слова в его образец и подсчёт количества ударений, поставленных Петей
- int accents = 0; // счётчик ударений
- sample = "";
- for (auto c : term)
- {// каждая заглавная буква прибавляет к счётчику единицу
- accents += (c < 'A' || c > 'Z' ? 0 : 1);
- sample += (char)(c | 32);
- }
- // объединённое условие ошибки Пети:
- if (thesa.find (sample) != thesa.end () ? thesa [sample].find (term) == thesa [sample].end () : accents != 1)
- score++;
- }
- // Выводим количество ошибок:
- cout << score;
- return 0;
- }
- /*
- П Р И М Е Ч А Н И Е
- ✓ ОМОГРАФЫ — слова отличающиеся только ударением
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement