#include <iostream>
#include <list>
#include <string>
typedef long long ll;
char sam[] = {'a', 'e', 'i', 'o', 'u', 'y'};
bool isSam(char c) {
for (int i = 0; i < 6; i ++) {
if (c == sam[i]) {
return true;
}
}
return false;
}
ll generateScore(ll start_pos, ll current_pos, ll length) {
ll left = current_pos - start_pos + 1;
ll right = length - current_pos - 2;
//std::cerr << left << " * " << right << " = " << left*right<< std::endl;
return left * right;
}
int main() {
ll sc = 0;
ll oc = 0;
std::list<bool> sam_list;
std::string input;
std::cin >> input;
if (input.length() < 3) {
std::cout << 0 << std::endl;
return 0;
}
for (int i=0; i<3; i++) {
char c = input[i];
bool sam_st = isSam(c);
sam_list.push_back(sam_st);
sc += sam_st ? 1 : 0;
oc += sam_st ? 0 : 1;
}
ll total = 0;
ll start = 0;
ll current_pos = 0;
if (sc == 3 || oc == 3) {
total += generateScore(start, current_pos, input.length());
start = current_pos + 1;
}
for (int i = 3; i < input.length(); i++) {
bool former_head = sam_list.front();
sam_list.pop_front();
char c = input[i];
bool sam_st = isSam(c);
sam_list.push_back(sam_st);
sc -= former_head ? 1 : 0;
oc -= former_head ? 0 : 1;
sc += sam_st ? 1 : 0;
oc += sam_st ? 0 : 1;
if (sc == 3 || oc == 3) {
current_pos = i - 2;
total += generateScore(start, current_pos, input.length());
start = current_pos + 1;
}
}
std::cout << total << std::endl;
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 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 74 75 | #include <iostream> #include <list> #include <string> typedef long long ll; char sam[] = {'a', 'e', 'i', 'o', 'u', 'y'}; bool isSam(char c) { for (int i = 0; i < 6; i ++) { if (c == sam[i]) { return true; } } return false; } ll generateScore(ll start_pos, ll current_pos, ll length) { ll left = current_pos - start_pos + 1; ll right = length - current_pos - 2; //std::cerr << left << " * " << right << " = " << left*right<< std::endl; return left * right; } int main() { ll sc = 0; ll oc = 0; std::list<bool> sam_list; std::string input; std::cin >> input; if (input.length() < 3) { std::cout << 0 << std::endl; return 0; } for (int i=0; i<3; i++) { char c = input[i]; bool sam_st = isSam(c); sam_list.push_back(sam_st); sc += sam_st ? 1 : 0; oc += sam_st ? 0 : 1; } ll total = 0; ll start = 0; ll current_pos = 0; if (sc == 3 || oc == 3) { total += generateScore(start, current_pos, input.length()); start = current_pos + 1; } for (int i = 3; i < input.length(); i++) { bool former_head = sam_list.front(); sam_list.pop_front(); char c = input[i]; bool sam_st = isSam(c); sam_list.push_back(sam_st); sc -= former_head ? 1 : 0; oc -= former_head ? 0 : 1; sc += sam_st ? 1 : 0; oc += sam_st ? 0 : 1; if (sc == 3 || oc == 3) { current_pos = i - 2; total += generateScore(start, current_pos, input.length()); start = current_pos + 1; } } std::cout << total << std::endl; return 0; } |
English