Gigel este la ora de informatică, iar profesorul i-a cerut să sorteze numele celor n
colegi ai săi după o regulă specială. Fiecărui nume i se asociază un număr care iniţial este 0
și crește cu 1
pentru fiecare pereche de vocale consecutive și scade cu 1
pentru fiecare pereche de consoane consecutive din nume. Dacă perechea este formată dintr-o vocală și o consoană, numărul nu se modifică.
Cerința
Dându-se cele n
nume ale colegilor, să se sorteze crescător după numerele asociate. La numere egale, se vor sorta alfabetic.
Date de intrare
Programul citește de la tastatură numărul n
, iar apoi n
nume, fiecare pe câte o linie nouă.
Date de ieșire
Programul va afișa pe ecran cele n
nume sortate, pe linii separate.
Restricții și precizări
1 ≤ n ≤ 300.000
;- numele conțin cel mult
20
de caractere; - numele copiilor sunt distincte două câte două.
Exemplu
Intrare
5 George Steve Jotaro Aeioubc Star
Ieșire
Star Steve George Jotaro Aeioubc
Explicație
Numerele corespunzătoare sunt în ordine: 0,-1,0,3,-1
.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema ora:
///Varianta cu sort-ul din STL (80 de puncte)
#include <iostream>
#include <algorithm>
using namespace std;
int n;
string voc="aeiouAEIOU";
struct str{
string s;
int v;
}s[1000001];
bool srt(str a,str b){
return !((a.v>b.v)||(a.v==b.v&&a.s>b.s));
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>s[i].s;
for(int j=1;s[i].s[j];j++){
if(voc.find(s[i].s[j])==string::npos&&voc.find(s[i].s[j-1])==string::npos){
s[i].v--;
}
else if(voc.find(s[i].s[j])!=string::npos&&voc.find(s[i].s[j-1])!=string::npos){
s[i].v++;
}
}
}
sort(s+1,s+n+1,srt);
for(int i=1;i<=n;i++){
cout<<s[i].s<<'\n';
}
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #2937 ora
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2937 ora de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!