#include <algorithm> #include <cstdio> #include <cstring> #include <vector> const int MAX_LEN = 200009; bool is_vowel(const char c) { switch(c) { case 'a': return true; case 'e': return true; case 'i': return true; case 'o': return true; case 'u': return true; case 'y': return true; } return false; } int main() { char s[MAX_LEN]; scanf("%s", s); const int len = strlen(s); std::vector<int> v; for(int i = 2; i < len; ++i) { if(is_vowel(s[i-2]) && is_vowel(s[i-1]) && is_vowel(s[i])) v.push_back(i); if(!is_vowel(s[i-2]) && !is_vowel(s[i-1]) && !is_vowel(s[i])) v.push_back(i); } std::vector<int>::iterator it = v.begin(); long long result = 0LL; for(int i = 0; i < len; ++i) { if(it == v.end()) break; if((i+1) == *it) ++it; if(it == v.end()) break; result += static_cast<long long>(len - *it); } printf("%lld\n", result); }
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 | #include <algorithm> #include <cstdio> #include <cstring> #include <vector> const int MAX_LEN = 200009; bool is_vowel(const char c) { switch(c) { case 'a': return true; case 'e': return true; case 'i': return true; case 'o': return true; case 'u': return true; case 'y': return true; } return false; } int main() { char s[MAX_LEN]; scanf("%s", s); const int len = strlen(s); std::vector<int> v; for(int i = 2; i < len; ++i) { if(is_vowel(s[i-2]) && is_vowel(s[i-1]) && is_vowel(s[i])) v.push_back(i); if(!is_vowel(s[i-2]) && !is_vowel(s[i-1]) && !is_vowel(s[i])) v.push_back(i); } std::vector<int>::iterator it = v.begin(); long long result = 0LL; for(int i = 0; i < len; ++i) { if(it == v.end()) break; if((i+1) == *it) ++it; if(it == v.end()) break; result += static_cast<long long>(len - *it); } printf("%lld\n", result); } |