#include <iostream> #include <vector> #include <string> using namespace std; const vector<char> samogloski = {'a','o','i', 'y', 'e', 'u'}; const uint32_t ile_liter = 26; // liczba wszystkich liter w alfabecie uint64_t ile_podciagow(uint64_t n) // n - dlugosc ciagu { return n*(n+1)/2; } bool czy_samogloska(char litera) { for (auto it = samogloski.begin(); it!= samogloski.end(); ++it) { if (litera == *it) return true; } return false; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); string tekst; cin >> tekst; uint32_t licznik = 0; // licznik kolejnych samoglosek / spolglosek bool czy_samogloski = false; // czy ostatnie zliczane litery to samogloska uint64_t ile_latwych = 0; // liczba wszystkich latwych do przeczytania podciagow uint32_t dl_tekstu = 0; string::iterator it_pocz = tekst.begin(); // indeks poczatku latwego tekstu for (string::iterator it = tekst.begin(); it!= tekst.end(); ++it) { dl_tekstu++; if(czy_samogloska(*it) == czy_samogloski) // nowa litera tego samego typu co poprzednia licznik++; else // nowa litera innego typu { if (licznik >=3) it_pocz = it-2; // nowy poczatek latwego tekstu; czy_samogloski = !czy_samogloski; licznik=1; } if (licznik<3) { // dodajemy liczbe latwych slow konczacych sie obecna literka uint64_t nowe_latwe = (it - it_pocz) +1; ile_latwych += nowe_latwe; } else // licznik>=3 { // latwe slowa konczace sie ta literka sa co najwyzej 2-literowe ile_latwych += 2; } } uint64_t ile_trudnych = ile_podciagow(dl_tekstu) - ile_latwych; // cout<< ile_podciagow(dl_tekstu) <<' '<< ile_latwych<<' '; cout<< ile_trudnych<<endl; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | #include <iostream> #include <vector> #include <string> using namespace std; const vector<char> samogloski = {'a','o','i', 'y', 'e', 'u'}; const uint32_t ile_liter = 26; // liczba wszystkich liter w alfabecie uint64_t ile_podciagow(uint64_t n) // n - dlugosc ciagu { return n*(n+1)/2; } bool czy_samogloska(char litera) { for (auto it = samogloski.begin(); it!= samogloski.end(); ++it) { if (litera == *it) return true; } return false; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); string tekst; cin >> tekst; uint32_t licznik = 0; // licznik kolejnych samoglosek / spolglosek bool czy_samogloski = false; // czy ostatnie zliczane litery to samogloska uint64_t ile_latwych = 0; // liczba wszystkich latwych do przeczytania podciagow uint32_t dl_tekstu = 0; string::iterator it_pocz = tekst.begin(); // indeks poczatku latwego tekstu for (string::iterator it = tekst.begin(); it!= tekst.end(); ++it) { dl_tekstu++; if(czy_samogloska(*it) == czy_samogloski) // nowa litera tego samego typu co poprzednia licznik++; else // nowa litera innego typu { if (licznik >=3) it_pocz = it-2; // nowy poczatek latwego tekstu; czy_samogloski = !czy_samogloski; licznik=1; } if (licznik<3) { // dodajemy liczbe latwych slow konczacych sie obecna literka uint64_t nowe_latwe = (it - it_pocz) +1; ile_latwych += nowe_latwe; } else // licznik>=3 { // latwe slowa konczace sie ta literka sa co najwyzej 2-literowe ile_latwych += 2; } } uint64_t ile_trudnych = ile_podciagow(dl_tekstu) - ile_latwych; // cout<< ile_podciagow(dl_tekstu) <<' '<< ile_latwych<<' '; cout<< ile_trudnych<<endl; return 0; } |