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