#include <cstdio>
#include <set>
#include <list>
using namespace std;
char s[200005];
int size;
list<int> position;
bool is_vowel(char c)
{
return c == 'a' ||
c == 'e' ||
c == 'i' ||
c == 'o' ||
c == 'u' ||
c == 'y';
}
int main()
{
scanf("%s", s);
// Get size
for(int i = 0; s[i] != 0; ++i)
size++;
// Mark positions of 3 in a row
for(int i = 0; i < size - 2; ++i)
if( (is_vowel(s[i]) && is_vowel(s[i+1]) && is_vowel(s[i+2])) ||
(!is_vowel(s[i]) && !is_vowel(s[i+1]) && !is_vowel(s[i+2])))
position.push_back(i);
long long result = 0;
if(position.empty())
{
printf("%lld\n", result);
return 0;
}
for(int i = 0; i < size - 2; ++i)
{
if(i > position.front()) position.pop_front();
if(position.empty()) break;
result += size - (position.front()+2);
}
printf("%lld\n", result);
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 | #include <cstdio> #include <set> #include <list> using namespace std; char s[200005]; int size; list<int> position; bool is_vowel(char c) { return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'y'; } int main() { scanf("%s", s); // Get size for(int i = 0; s[i] != 0; ++i) size++; // Mark positions of 3 in a row for(int i = 0; i < size - 2; ++i) if( (is_vowel(s[i]) && is_vowel(s[i+1]) && is_vowel(s[i+2])) || (!is_vowel(s[i]) && !is_vowel(s[i+1]) && !is_vowel(s[i+2]))) position.push_back(i); long long result = 0; if(position.empty()) { printf("%lld\n", result); return 0; } for(int i = 0; i < size - 2; ++i) { if(i > position.front()) position.pop_front(); if(position.empty()) break; result += size - (position.front()+2); } printf("%lld\n", result); return 0; } |
English