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
61
62
63
64
65
66
#include <iostream>
#include <string>
#include <vector>

using namespace std;

bool samogloska(char x)
{
    if(x != 'a' && x != 'e' && x != 'i' && x != 'o' && x != 'u' && x != 'y' )
        return false;
    else
        return true;
}

int main()
{
long long i, p, liczba = 0, reszta = 0;
//liczba - liczba możliwych fragmentów tekstu
//reszta - powtarzające się fragmenty tekstu
vector <long long> suma;
vector <int> indexp;
vector <long long> powtorki;
string text;

cin>>text;

if(text.length() < 3) 
	{
		cout<<0;
		return 0;
	}

for(i = 0; i < text.length() - 2; i++)
	{
       if((samogloska(text[i]) && samogloska(text[i + 1]) && samogloska(text[i + 2])) ||  ((samogloska(text[i])==false && samogloska(text[i + 1])==false && samogloska(text[i + 2])==false)))
        {  
				p = i;
                
                suma.push_back(1 + p + (text.length()-p-3) + ((text.length()-p-3)*p));
           
                indexp.push_back(i);
               
        }     
                
    }

for(i = 1; i < indexp.size(); i++)
    {
  powtorki.push_back( 1 + (indexp[i-1]+1)  * (text.length() - indexp[i]-3) + indexp[i - 1]);
    }
 
for(i = 0; i < powtorki.size(); i++)
	{
	//cout<< powtorki[i] << endl;
	reszta += powtorki[i];	   
	}

for(i = 0; i < suma.size(); i++)
	{
	liczba += suma[i];
	}

cout << liczba - reszta ;

return 0;
}