#include <iostream> #include <string> using namespace std; inline void translate(char& c) { c = (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'y') ? 0 : 1; } inline void solve() { string in; long long size; cin >> in; size = in.size(); if (size < 3) { cout << 0 << endl; return; } long long result = (size - 1) * (size - 2) / 2; translate(in[0]); translate(in[1]); int sum = in[0] + in[1]; long long good = 0; for (int i = 2; i < size; ++i) { translate(in[i]); sum += in[i]; if (sum != 0 && sum != 3) { ++good; } else { if (good != 0) { result -= (good + 1) * good / 2; good = 0; } } sum -= in[i - 2]; } if (good != 0) { result -= (good + 1) * good / 2; } cout << result << endl; } int main(int argc, char **argv) { ios_base::sync_with_stdio(0); solve(); 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 | #include <iostream> #include <string> using namespace std; inline void translate(char& c) { c = (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'y') ? 0 : 1; } inline void solve() { string in; long long size; cin >> in; size = in.size(); if (size < 3) { cout << 0 << endl; return; } long long result = (size - 1) * (size - 2) / 2; translate(in[0]); translate(in[1]); int sum = in[0] + in[1]; long long good = 0; for (int i = 2; i < size; ++i) { translate(in[i]); sum += in[i]; if (sum != 0 && sum != 3) { ++good; } else { if (good != 0) { result -= (good + 1) * good / 2; good = 0; } } sum -= in[i - 2]; } if (good != 0) { result -= (good + 1) * good / 2; } cout << result << endl; } int main(int argc, char **argv) { ios_base::sync_with_stdio(0); solve(); return 0; } |