#include <cstdio>
#include <cstring>
char s[200001];
int A[200001];
bool is_vowel(char c) {
if(c=='a' || c=='e' || c=='i' ||
c=='o' || c=='u' || c=='y')
return true;
return false;
}
void set_nearest_triplet(int n) {
for(int i=0;i<n;i++)
A[i]=-1;
int nearest=-1;
for(int i=n-1;i>=2;i--) {
if(is_vowel(s[i])==is_vowel(s[i-1]) &&
is_vowel(s[i-1])==is_vowel(s[i-2]))
nearest=i;
A[i-2]=nearest;
}
}
int main() {
scanf("%s",s);
int n=strlen(s);
set_nearest_triplet(n);
long long res=0;
for(int i=0;i<n;i++) {
int j=A[i];
if(j==-1)
break;
res+=n-j;
}
printf("%lld\n",res);
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 | #include <cstdio> #include <cstring> char s[200001]; int A[200001]; bool is_vowel(char c) { if(c=='a' || c=='e' || c=='i' || c=='o' || c=='u' || c=='y') return true; return false; } void set_nearest_triplet(int n) { for(int i=0;i<n;i++) A[i]=-1; int nearest=-1; for(int i=n-1;i>=2;i--) { if(is_vowel(s[i])==is_vowel(s[i-1]) && is_vowel(s[i-1])==is_vowel(s[i-2])) nearest=i; A[i-2]=nearest; } } int main() { scanf("%s",s); int n=strlen(s); set_nearest_triplet(n); long long res=0; for(int i=0;i<n;i++) { int j=A[i]; if(j==-1) break; res+=n-j; } printf("%lld\n",res); return 0; } |
English