#include <iostream>
#include <vector>
int isConsonant(char);
int main() {
char tmp;
std::vector<int> input;
std::vector<int> begs;
std::vector<int> ends;
while(scanf("%c", &tmp) != EOF) {
if(tmp == '\n') {
break;
}
input.push_back(isConsonant(tmp));
}
int current = -1;
int seen = 0, beg = 0;
for(int i = 0; i < input.size(); i++) {
if(current != input[i]) {
if(i-beg >= 3) {
begs.push_back(beg);
ends.push_back(i-1);
}
current = input[i];
seen = 0;
beg = i;
}
seen++;
}
if(input.size()-beg >= 3) {
begs.push_back(beg);
ends.push_back(input.size()-1);
}
int n = input.size();
int64_t answer = 0;
for(int i = 0; i < begs.size(); i++) {
int x = ends[i] - begs[i] + 1;
answer += (x*x - 3*x + 2)/2;
answer += (x-2)*(n-ends[i]-1);
//printf("%i [%i, %i] %i %ld\n", i, begs[i], ends[i], x, answer);
}
if(begs.size() > 0) {
int x = ends[0] - begs[0] + 1;
answer += (begs[0])*(n-ends[0]+x-3);
}
//printf("%ld\n", answer);
for(int i = 1; i < begs.size(); i++) {
int x = ends[i] - begs[i] + 1;
answer += (begs[i] - ends[i-1] + 1)*(x-2);
}
printf("%ld\n", answer);
return 0;
}
int isConsonant(char x) {
switch (x) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
case 'y':
return 0;
default:
return 1;
}
}
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 | #include <iostream> #include <vector> int isConsonant(char); int main() { char tmp; std::vector<int> input; std::vector<int> begs; std::vector<int> ends; while(scanf("%c", &tmp) != EOF) { if(tmp == '\n') { break; } input.push_back(isConsonant(tmp)); } int current = -1; int seen = 0, beg = 0; for(int i = 0; i < input.size(); i++) { if(current != input[i]) { if(i-beg >= 3) { begs.push_back(beg); ends.push_back(i-1); } current = input[i]; seen = 0; beg = i; } seen++; } if(input.size()-beg >= 3) { begs.push_back(beg); ends.push_back(input.size()-1); } int n = input.size(); int64_t answer = 0; for(int i = 0; i < begs.size(); i++) { int x = ends[i] - begs[i] + 1; answer += (x*x - 3*x + 2)/2; answer += (x-2)*(n-ends[i]-1); //printf("%i [%i, %i] %i %ld\n", i, begs[i], ends[i], x, answer); } if(begs.size() > 0) { int x = ends[0] - begs[0] + 1; answer += (begs[0])*(n-ends[0]+x-3); } //printf("%ld\n", answer); for(int i = 1; i < begs.size(); i++) { int x = ends[i] - begs[i] + 1; answer += (begs[i] - ends[i-1] + 1)*(x-2); } printf("%ld\n", answer); return 0; } int isConsonant(char x) { switch (x) { case 'a': case 'e': case 'i': case 'o': case 'u': case 'y': return 0; default: return 1; } } |
English