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