#include <iostream> #include <string> using namespace std; bool czySam(char c); bool czyPodslowoMa3(string s, int a, int b); void znajdz_wszystkie_3(string slowo, int* tab, int & size); long long ileTrudnychPodslow(string slowo); int main(void) { string s; while ((cin >> s)) cout << ileTrudnychPodslow(s); return 0; } long long ileTrudnychPodslow(string slowo) { int tab[200000 - 2] = { -1 }; int i = 0; znajdz_wszystkie_3(slowo, tab, i); long long wynik = 0L; if (i == 0) return wynik; wynik += (tab[0] - 2)*(slowo.length() - tab[0]); for (int k = 0; k < i; ++k) wynik += slowo.length() - tab[k]; return wynik; } void znajdz_wszystkie_3(string slowo, int* tab, int & size) { if (slowo.length() < 3) return; bool a, b, c; b = czySam(slowo[0]); c = czySam(slowo[1]); for (int i = 2; i < slowo.length(); ++i) { a = b; b = c; c = czySam(slowo[i]); if ((a && b && c) || (!a && !b && !c)) tab[size++] = i; } } bool czyPodslowoMa3(string s, int a, int b) { for (int i = a; i + 2 < b; ++i) { bool x = czySam(s[i]), y = czySam(s[i + 1]), z = czySam(s[i + 2]); if ( (x && y && z) || (!x && !y && !z) ) { return true; } } return false; } bool czySam(char c) { switch (c) { case 'a': case 'e': case 'i': case 'o': case 'u': case 'y': return true; default:return false; } }
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 | #include <iostream> #include <string> using namespace std; bool czySam(char c); bool czyPodslowoMa3(string s, int a, int b); void znajdz_wszystkie_3(string slowo, int* tab, int & size); long long ileTrudnychPodslow(string slowo); int main(void) { string s; while ((cin >> s)) cout << ileTrudnychPodslow(s); return 0; } long long ileTrudnychPodslow(string slowo) { int tab[200000 - 2] = { -1 }; int i = 0; znajdz_wszystkie_3(slowo, tab, i); long long wynik = 0L; if (i == 0) return wynik; wynik += (tab[0] - 2)*(slowo.length() - tab[0]); for (int k = 0; k < i; ++k) wynik += slowo.length() - tab[k]; return wynik; } void znajdz_wszystkie_3(string slowo, int* tab, int & size) { if (slowo.length() < 3) return; bool a, b, c; b = czySam(slowo[0]); c = czySam(slowo[1]); for (int i = 2; i < slowo.length(); ++i) { a = b; b = c; c = czySam(slowo[i]); if ((a && b && c) || (!a && !b && !c)) tab[size++] = i; } } bool czyPodslowoMa3(string s, int a, int b) { for (int i = a; i + 2 < b; ++i) { bool x = czySam(s[i]), y = czySam(s[i + 1]), z = czySam(s[i + 2]); if ( (x && y && z) || (!x && !y && !z) ) { return true; } } return false; } bool czySam(char c) { switch (c) { case 'a': case 'e': case 'i': case 'o': case 'u': case 'y': return true; default:return false; } } |