#include <cstdio> #define MAXN 200005 #define CZYLITERA(c) (c >= 'a' && c <= 'z') #define SAMOGLOSKA 1 #define SPOLGLOSKA 0 #define RODZAJ(c) ((c == 'a' || c == 'e' || c == 'i' || c == 'o'|| c == 'u' || c == 'y')?SAMOGLOSKA:SPOLGLOSKA) #include <algorithm> int main(){ char zyczenia[MAXN]; int l=0, r, najblizszy[MAXN]; while(true){ r = getchar(); if(r == EOF) break; if(CZYLITERA(r)) zyczenia[l++] = RODZAJ(r); else break; } int ile_poprz = 0, rodz = 0, ostatni = l; long long wyn = 0; for(int i=l-1;i>=0;i--){ if(zyczenia[i] == rodz) ile_poprz++; else{ ile_poprz = 1; rodz = zyczenia[i]; } if( ile_poprz >= 3 ){ ostatni = i; } najblizszy[i] = ostatni; } for(int i=0; i < l; i++){ wyn += std::max(l - najblizszy[i] - 2, 0); } printf("%lld",wyn); }
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 | #include <cstdio> #define MAXN 200005 #define CZYLITERA(c) (c >= 'a' && c <= 'z') #define SAMOGLOSKA 1 #define SPOLGLOSKA 0 #define RODZAJ(c) ((c == 'a' || c == 'e' || c == 'i' || c == 'o'|| c == 'u' || c == 'y')?SAMOGLOSKA:SPOLGLOSKA) #include <algorithm> int main(){ char zyczenia[MAXN]; int l=0, r, najblizszy[MAXN]; while(true){ r = getchar(); if(r == EOF) break; if(CZYLITERA(r)) zyczenia[l++] = RODZAJ(r); else break; } int ile_poprz = 0, rodz = 0, ostatni = l; long long wyn = 0; for(int i=l-1;i>=0;i--){ if(zyczenia[i] == rodz) ile_poprz++; else{ ile_poprz = 1; rodz = zyczenia[i]; } if( ile_poprz >= 3 ){ ostatni = i; } najblizszy[i] = ostatni; } for(int i=0; i < l; i++){ wyn += std::max(l - najblizszy[i] - 2, 0); } printf("%lld",wyn); } |