Informatică, întrebare adresată de ProMinecraft69, 8 ani în urmă

#2937 pbinfo

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


Am facut un cod de 80 de puncte iar la indicatii zice ca trebuie sa lucrez cu mape stl si eu habar nu am ce sunt alea, ma puteti ajuta sau sa-mi explicati ? :))

Codul meu : https://pastebin.com/fkuey42m


boiustef: eu făceam un cod aproape leit cu al tău. dar mape stl, nu ...
ProMinecraft69: :)
boiustef: am luat 100
boiustef: nu am folosit mape stl
boiustef: am modificat codul tău... :))) e utilă şi pentru ambii această practică...

Răspunsuri la întrebare

Răspuns de boiustef
1

Răspuns:

#include <iostream>

#include <fstream>

#include <cstring>

#include <algorithm>

using namespace std;

struct Copil

{

   char Nume[21];

   int Numar;

};

char voc[]="aeiouAEIOU";

bool acompare(Copil lhs, Copil rhs) {

   if(lhs.Numar == rhs.Numar){

       if (strcmp(lhs.Nume,rhs.Nume)<0)

      return lhs.Nume < rhs.Nume;

       }

   return lhs.Numar < rhs.Numar;

    }

Copil v[300001] ;

int main()

{

  int n;

  cin >> n;

  for(int i = 1; i <= n; i++)

  {

      cin >> v[i].Nume;

      char aux[21]="";

      strcpy(aux,v[i].Nume);

      int maxim = 0;

      int l = strlen(aux);

      for(int j = 0; j < l - 1; j++)

      {

          if(strchr(voc,aux[j]) && strchr(voc,aux[j + 1]))

              maxim += 1;

          if(!(strchr(voc,aux[j])) && !(strchr(voc,aux[j + 1])))

              maxim -= 1;

      }

      v[i].Numar = maxim;

  }

  sort(v + 1, v + 1 + n,acompare);

  for(int i = 1; i <= n; i++)

  {

      cout << v[i].Nume << "\n";

  }

}

Explicație:

folosirea string e mai lentă...


ProMinecraft69: Va multumesc!
Alte întrebări interesante