#include <bits/stdc++.h>
unsigned long long countPermutations(unsigned begin, unsigned end, unsigned localBegin, unsigned localEnd)
{
unsigned long long ret = 0;
unsigned long long before = localBegin - begin;
unsigned long long after = end - localEnd;
unsigned long long length = localEnd - localBegin;
ret += (length - 2)*(before + after);
ret += before * after;
ret += (length - 2) * (length - 1) / 2;
return ret;
}
int main(void){
std::vector<bool> arr;
arr.reserve( 200000);
char c;
while(scanf("%c", &c) != EOF){
if(c == '\n')
break;
arr.push_back(c=='a'||c=='e'||c=='i'||c=='o'||c=='u'||c=='y');
}
unsigned end = arr.size();
unsigned begin = 0, localBegin = 0, localEnd = 0;
unsigned count = 1;
bool last = arr[0];
unsigned i = 1;
unsigned long long ret = 0;
for(;i < end; i++){
if(last != arr[i]){
last = arr[i];
if(count >= 3){
localEnd = i;
ret += countPermutations(begin, end, localBegin, localEnd);
begin = i-2;
}
count = 1;
localBegin = i;
} else {
count++;
}
}
if(count >= 3)
ret += countPermutations(begin, end, localBegin, end);
std::cout << ret << 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 | #include <bits/stdc++.h> unsigned long long countPermutations(unsigned begin, unsigned end, unsigned localBegin, unsigned localEnd) { unsigned long long ret = 0; unsigned long long before = localBegin - begin; unsigned long long after = end - localEnd; unsigned long long length = localEnd - localBegin; ret += (length - 2)*(before + after); ret += before * after; ret += (length - 2) * (length - 1) / 2; return ret; } int main(void){ std::vector<bool> arr; arr.reserve( 200000); char c; while(scanf("%c", &c) != EOF){ if(c == '\n') break; arr.push_back(c=='a'||c=='e'||c=='i'||c=='o'||c=='u'||c=='y'); } unsigned end = arr.size(); unsigned begin = 0, localBegin = 0, localEnd = 0; unsigned count = 1; bool last = arr[0]; unsigned i = 1; unsigned long long ret = 0; for(;i < end; i++){ if(last != arr[i]){ last = arr[i]; if(count >= 3){ localEnd = i; ret += countPermutations(begin, end, localBegin, localEnd); begin = i-2; } count = 1; localBegin = i; } else { count++; } } if(count >= 3) ret += countPermutations(begin, end, localBegin, end); std::cout << ret << std::endl; return 0; } |
English