#include <iostream> #include <string> #include <vector> using namespace std; bool is_vowel(char c) { switch(c) { case 'a': case 'e': case 'i': case 'o': case 'u': case 'y': return true; default: return false; } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); string s; cin >> s; long long n = s.size(); long long result = n * (n+1) / 2; vector<bool> is_more_difficult(n+1, false); vector<bool> is_less_difficult(n+1, false); for( int i=0 ; i<n-2 ; i++ ) { bool pos_i0 = false, pos_i1 = false, pos_i2 = false; pos_i0 = is_vowel(s[i]); pos_i1 = is_vowel(s[i+1]); pos_i2 = is_vowel(s[i+2]); if( pos_i0 && pos_i1 && pos_i2 ) { is_more_difficult[i+2] = true; is_less_difficult[i] = true; } else if( !(pos_i0 || pos_i1 || pos_i2) ) { is_more_difficult[i+2] = true; is_less_difficult[i] = true; } } long long i=0, j=0; while( i<n && is_more_difficult[i+1]==false ) { i++; } //cout << result << endl; result -= (i+1) * (i+2) / 2; while( i<n-1 ) { i++; while( i<n-1 && is_more_difficult[i+1]==false ) { i++; } while( j<i ) { j++; if( is_less_difficult[j-1] ) { break; } } //cout << result << endl; result -= (i-j+1) * (i-j+2) / 2; result++; } cout << result << 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 75 76 77 78 | #include <iostream> #include <string> #include <vector> using namespace std; bool is_vowel(char c) { switch(c) { case 'a': case 'e': case 'i': case 'o': case 'u': case 'y': return true; default: return false; } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); string s; cin >> s; long long n = s.size(); long long result = n * (n+1) / 2; vector<bool> is_more_difficult(n+1, false); vector<bool> is_less_difficult(n+1, false); for( int i=0 ; i<n-2 ; i++ ) { bool pos_i0 = false, pos_i1 = false, pos_i2 = false; pos_i0 = is_vowel(s[i]); pos_i1 = is_vowel(s[i+1]); pos_i2 = is_vowel(s[i+2]); if( pos_i0 && pos_i1 && pos_i2 ) { is_more_difficult[i+2] = true; is_less_difficult[i] = true; } else if( !(pos_i0 || pos_i1 || pos_i2) ) { is_more_difficult[i+2] = true; is_less_difficult[i] = true; } } long long i=0, j=0; while( i<n && is_more_difficult[i+1]==false ) { i++; } //cout << result << endl; result -= (i+1) * (i+2) / 2; while( i<n-1 ) { i++; while( i<n-1 && is_more_difficult[i+1]==false ) { i++; } while( j<i ) { j++; if( is_less_difficult[j-1] ) { break; } } //cout << result << endl; result -= (i-j+1) * (i-j+2) / 2; result++; } cout << result << endl; return 0; } |