#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
int getint(){
char c;int temp=0;
do{
c=getchar_unlocked();
}while(c<'0' || c>'9');
do{
temp=temp+c-'0';
c=getchar_unlocked();
}while(c>='0' && c<='9');
return temp;
}
int k,tab[300000];
int x=0;
unsigned long long wynik;
int tab2[400];
string ciag;
int pref[300000];
int gwiazdka[300000];
int main(){
tab2['a']=1;
tab2['e']=1;
tab2['i']=1;
tab2['o']=1;
tab2['u']=1;
tab2['y']=1;
cin>>ciag;
for(int i=0;i<ciag.size();i++){
if(tab2[ciag[i]]){
tab[i]=1;
}
else tab[i]=-1;
}
pref[0]=tab[0];
for(int i=1;i<ciag.size();i++){
pref[i]=tab[i]+pref[i-1];
}
int minimum=ciag.size();
for(int i=0;i<ciag.size();i++){
gwiazdka[i]=ciag.size();
}
/*//
for(int i=0;i<ciag.size();i++){
cout<<pref[i]<<" ";
}cout<<endl;//
*/
if(abs(pref[2])==3){
gwiazdka[0]=2;
}
for(int i=0;i<ciag.size()-2;i++){
if(abs(pref[i+3]-pref[i])==3){
gwiazdka[i+1]=i+3;
}
}
for(int i=ciag.size()-2;i>=0;i--){
minimum=min(minimum,gwiazdka[i]);
gwiazdka[i]=minimum;
}
/*
for(int i=0;i<ciag.size();i++)
cout<<gwiazdka[i]<<" ";
cout<<endl;
*/
//cout<<"dl"<<ciag.size();
for(int i=0;i<ciag.size();i++){
//cout<<gwiazdka[i]<<" ";
if(ciag.size()-gwiazdka[i]>0){
wynik+=ciag.size()-gwiazdka[i];
// cout<<ciag.size()-gwiazdka[i];
}
//cout<<endl;
}//cout<<endl<<endl;
cout<<wynik;
//sumy prefiksowe i pointery na najblizszy i najdalszy ** i zliczamy od lewej do prawej sumujemy i otrzymujemy wynik
//pamietac o LONG LONGACH BO WYWALI NA TYM
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | #include <iostream> #include <algorithm> #include <vector> #include <string> using namespace std; int getint(){ char c;int temp=0; do{ c=getchar_unlocked(); }while(c<'0' || c>'9'); do{ temp=temp+c-'0'; c=getchar_unlocked(); }while(c>='0' && c<='9'); return temp; } int k,tab[300000]; int x=0; unsigned long long wynik; int tab2[400]; string ciag; int pref[300000]; int gwiazdka[300000]; int main(){ tab2['a']=1; tab2['e']=1; tab2['i']=1; tab2['o']=1; tab2['u']=1; tab2['y']=1; cin>>ciag; for(int i=0;i<ciag.size();i++){ if(tab2[ciag[i]]){ tab[i]=1; } else tab[i]=-1; } pref[0]=tab[0]; for(int i=1;i<ciag.size();i++){ pref[i]=tab[i]+pref[i-1]; } int minimum=ciag.size(); for(int i=0;i<ciag.size();i++){ gwiazdka[i]=ciag.size(); } /*// for(int i=0;i<ciag.size();i++){ cout<<pref[i]<<" "; }cout<<endl;// */ if(abs(pref[2])==3){ gwiazdka[0]=2; } for(int i=0;i<ciag.size()-2;i++){ if(abs(pref[i+3]-pref[i])==3){ gwiazdka[i+1]=i+3; } } for(int i=ciag.size()-2;i>=0;i--){ minimum=min(minimum,gwiazdka[i]); gwiazdka[i]=minimum; } /* for(int i=0;i<ciag.size();i++) cout<<gwiazdka[i]<<" "; cout<<endl; */ //cout<<"dl"<<ciag.size(); for(int i=0;i<ciag.size();i++){ //cout<<gwiazdka[i]<<" "; if(ciag.size()-gwiazdka[i]>0){ wynik+=ciag.size()-gwiazdka[i]; // cout<<ciag.size()-gwiazdka[i]; } //cout<<endl; }//cout<<endl<<endl; cout<<wynik; //sumy prefiksowe i pointery na najblizszy i najdalszy ** i zliczamy od lewej do prawej sumujemy i otrzymujemy wynik //pamietac o LONG LONGACH BO WYWALI NA TYM return 0; } |
English