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