Quants aprovats? S66165


Statement
 

pdf   zip   main.cc

Disposem d’una llista d’estudiants amb el seu DNI i la seva nota, ordenada per nota de major a menor. La llista té almenys un estudiant aprovat (nota 5.0\geq 5.0) i un suspès (nota <5.0< 5.0). Volem saber quants estudiants han aprovat.

Disposem d’una tupla Estudiant amb la declaració:

#include <vector>
#include <string>
using namespace std;

struct Estudiant {
    string dni;
    double nota;
};

/**
 * @brief Retorna el nombre d'estudiants que han aprovat (nota >= 5.0).
 * 
 * @pre El vector `E` està ordenat de major a menor nota.
 *      El vector té almenys un estudiant aprovat i un suspès.
 */
int quants_aprovats(const vector<Estudiant>& E);

Fes una funció quants_aprovats amb la declaració de dalt.

Per exemple, si tenim la llista d’estudiants:

12345678A 9.5
23456789B 7.2
34567890C 5.0
45678901D 4.9
56789012E 3.1

La funció hauria de retornar 3, ja que hi ha 3 estudiants amb nota 5.0\geq 5.0.

Observació

Aquest problema té com a centre d’interès l’eficiència. Feu servir el millor algorisme possible a la funció i considereu que rebreu un vector de grans dimensions.

IMPORTANT: Quan envieu aquest problema, cal posar en el fitxer .cc només: a) els includes, b) la declaració de la tupla Estudiant i c) la definició de la funció quants_aprovats. Si modifiqueu el main.cc per poder provar en el vostre ordinador, podeu esborrar (o comentar amb /* i */) la funció main i llegir_estudiants.

Entrada

L’entrada són diversos casos de llistes d’estudiants. De la lectura ja se n’encarrega el programa principal. Cada cas comença amb un enter nn (n2n \geq 2) seguit de nn línies amb el DNI i la nota de cada estudiant. La llista està ordenada per nota de major a menor i té almenys un estudiant aprovat i un suspès.

Sortida

La sortida és el nombre d’aprovats per a cada llista. De l’escriptura també se n’encarrega el programa principal.

Public test cases
  • Input

    5
    12345678A 9.5
    23456789B 7.2
    34567890C 5.0
    45678901D 4.9
    56789012E 3.1
    
    4
    11111111A 10.0
    22222222B 8.5
    33333333C 6.0
    44444444D 4.5
    
    3
    55555555A 5.0
    66666666B 3.2
    77777777C 2.1
    
    2
    88888888A 9.0
    99999999B 4.0
    

    Output

    3
    3
    1
    1
    
  • Information
    Author
    Pau Fernández
    Language
    Catalan
    Other languages
    Spanish
    Official solutions
    C++
    User solutions
    C++