#include <bits/stdc++.h> using namespace std; const int MAX = 200005; int N; bool samogloska(char c){ if((c == 'a') || (c == 'e') || (c == 'i') || (c == 'o') || (c == 'u') || (c == 'y')){ return true; } return false; } bool czy[MAX]; string s; std::vector<int> kolejne; long long wzor(int a){ long long s = a; s *= a + 1; s /= 2; return s; } int main(){ std::ios_base::sync_with_stdio(0); std::cin.tie(NULL); cin >> s; N = s.size(); if(N <= 2){ cout << 0 << endl; return 0; } for(int i = 0; i < N; i++){ czy[i] = samogloska(s[i]); } kolejne.push_back(0); for(int i = 1; i < N - 1; i++){ if((czy[i - 1] == czy[i]) && (czy[i] == czy[i + 1])){ kolejne.push_back(i); } } kolejne.push_back(N - 1); long long wynik = 0; for(int i = 0; i < kolejne.size() - 1; i++){ wynik += wzor(kolejne[i + 1] - kolejne[i] + 1); } wynik -= kolejne.size() - 2; cout << wzor(N) - wynik << endl; }
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 | #include <bits/stdc++.h> using namespace std; const int MAX = 200005; int N; bool samogloska(char c){ if((c == 'a') || (c == 'e') || (c == 'i') || (c == 'o') || (c == 'u') || (c == 'y')){ return true; } return false; } bool czy[MAX]; string s; std::vector<int> kolejne; long long wzor(int a){ long long s = a; s *= a + 1; s /= 2; return s; } int main(){ std::ios_base::sync_with_stdio(0); std::cin.tie(NULL); cin >> s; N = s.size(); if(N <= 2){ cout << 0 << endl; return 0; } for(int i = 0; i < N; i++){ czy[i] = samogloska(s[i]); } kolejne.push_back(0); for(int i = 1; i < N - 1; i++){ if((czy[i - 1] == czy[i]) && (czy[i] == czy[i + 1])){ kolejne.push_back(i); } } kolejne.push_back(N - 1); long long wynik = 0; for(int i = 0; i < kolejne.size() - 1; i++){ wynik += wzor(kolejne[i + 1] - kolejne[i] + 1); } wynik -= kolejne.size() - 2; cout << wzor(N) - wynik << endl; } |