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