// КОНТРОЛЬНАЯ ПО УДАРЕНИЯМ /* Учительница задала Пете домашнее задание — в заданном тексте расставить ударения в словах, после чего поручила Васе проверить это домашнее задание. Вася очень плохо знаком с данной темой, поэтому он нашел словарь, в котором указано, как ставятся ударения в словах. К сожалению, в этом словаре присутствуют не все слова. Вася решил, что в словах, которых нет в словаре, он будет считать, что Петя поставил ударения правильно, если в этом слове Петей поставлено ровно одно ударение. Оказалось, что в некоторых словах ударение может быть поставлено больше, чем одним способом. Вася решил, что в этом случае если то, как Петя поставил ударение, соответствует одному из приведенных в словаре вариантов, он будет засчитывать это как правильную расстановку ударения, а если не соответствует, то как ошибку. Вам дан словарь, которым пользовался Вася и домашнее задание, сданное Петей. Ваша задача — определить количество ошибок, которое в этом задании насчитает Вася */ #include #include #include #include using namespace std; int main () { int n, score = 0; // score — счёт ошибок cin >> n; /* ЗДЕСЬ НЕ ТРЕБУЕТСЯ ПРОВЕРЯТЬ n < 1 ДАЖЕ ПРИ ПУСТОМ СЛОВАРЕ ВАСЯ ОБЯЗАН ПРОВЕРИТЬ КОЛИЧЕСТВО УДАРЕНИЙ ПОСТАВЛЕННЫХ ПЕТЕЙ!!! */ map > 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; } /*      П Р И М Е Ч А Н И Е ✓ ОМОГРАФЫ — слова отличающиеся только ударением */