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