#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; } |