Задача взята с сайта e-olymp
Задача
«Ура-a-a! Заработало!» – радостно воскликнул Матроскин, услышав первую произнесенную Галчонком фразу.
Э.Успенский «Трое из Простоквашино»
Как Вам всем известно, Галчонок из мультфильма «Трое из Простоквашино» при стуке в дверь всегда спрашивал: «Кто там?». Статистика, как и вся математика, наука точная и она утверждает, что Галчонок мог запоминать как отдельные слова, так и целые предложения, только в том случае, если слово было произнесено не менее $n$ раз, а предложение – не менее чем $m$ раз $\left(n\leqslant m\right)$.
Ваша задача по заданному тексту определить количество слов и предложений, которые точно запомнил Галчонок.
Входные данные
В первой строке находится два натуральных числа $n$ и $m$ $\left(n , m \leqslant 100 \right)$. Во второй строке находится сам текст. Текст написан грамматически верно.
Выходные данные
Два числа через пробел: сначала количество запомненных слов $s$, а потом количество запомненных предложений $p$.
Тесты
N,M | ТЕКСТ | ВЫХОДНЫЕ ДАННЫЕ |
---|---|---|
2,4 | Blessed are the peacemakers, for they will be called children of God. |
0 0 |
2,3 | Kto tam? It is Pechkin. Kto tam? My name is Fedor. Kto tam? Pechkin! | 4 1 |
1,1 | Hey you! out there on the road Always doing what you’re told Can you help me Hey you! out there beyond the wall Breaking bottles in the hall Can you help me Hey you! don’t tell me there’s no hope at all Together we stand, divided we fall |
33 3 |
2,2 | Yes! No. Yes Yes! No Yes no no. No yes No No. | 2 1 |
1,1 | Workers of the world, unite! | 5 1 |
Решение
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <iostream> #include <map> using namespace std; int main() { map <string,int> s; map <string,int> w; int n, m, a = 0,b = 0; cin >> n >> m; string word, sent; while(cin >> word){ if(word.back() == ',')word.pop_back(); sent = sent + word; if(word.back() == '.' or word.back() == '?' or word.back() == '!'){ word.pop_back(); sent.pop_back(); if((++s[sent]) == m)a++; sent = ""; } if((++w[word]) == n)b++; } cout << b << ' ' << a; } |
Для решения данной задачи найдем все слова и все предложения в тексте. Слова будем считать одинаковыми, если они совпадают без знаков препинания в нижнем регистре они совпадают. Одинаковыми предложениями, соответственно, будем считать предложения, что совпадают без пробелов и знаков препинания. Увеличивая значения ассоциативных массивов, соответствующих предложению или слову на 1, увеличим на 1 значение b, если слова совпали больше чем $n$ раз и значение a, если предложения совпали больше чем $m$ раз.
Код задачи на ideone
Засчитанное решение на e-olymp
Для отправки комментария необходимо войти на сайт.