#include <cstdio>
#include <string.h>
using namespace std;
int T[300];
char A[1000000];
long long calc(long long b, long long e) {
e -= b;
if (e<=0) return 0;
return e*(e+1)/2;
}
int main() {
for (int i=0; i<256; i++) T[i]=0;
T['a']=T['e']=T['i']=T['o']=T['u']=T['y']=1;
scanf("%s", A);
long long n = strlen(A);
if (n <= 2) {
printf("0\n");
return 0;
}
long long c = 0;
long long p = -1;
for (long long i=0; i<=n-3; i++)
if (T[A[i]]==T[A[i+1]] && T[A[i+1]]==T[A[i+2]]) {
if (p<0) c += calc(0, i);
else {
if (p+3<i) {
c += calc(p, i-1);
}
}
p=i;
}
if (p<0) c += calc(0, n-2);
else c += calc(p, n-3);
printf("%lld\n", (n-2)*(n-1)/2-c);
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 <string.h> using namespace std; int T[300]; char A[1000000]; long long calc(long long b, long long e) { e -= b; if (e<=0) return 0; return e*(e+1)/2; } int main() { for (int i=0; i<256; i++) T[i]=0; T['a']=T['e']=T['i']=T['o']=T['u']=T['y']=1; scanf("%s", A); long long n = strlen(A); if (n <= 2) { printf("0\n"); return 0; } long long c = 0; long long p = -1; for (long long i=0; i<=n-3; i++) if (T[A[i]]==T[A[i+1]] && T[A[i+1]]==T[A[i+2]]) { if (p<0) c += calc(0, i); else { if (p+3<i) { c += calc(p, i-1); } } p=i; } if (p<0) c += calc(0, n-2); else c += calc(p, n-3); printf("%lld\n", (n-2)*(n-1)/2-c); return 0; } |
English