En unes oposicions els participants tenen un nom (un
string) i un número de punts (un double). El
guanyador
de les oposicions és el participant amb la major puntuació,
.
Les normes de les oposicions diuen que aproven tots els participants que
tenen almenys
punts, és a dir, la meitat de punts que el guanyador.
Disposem d’una tupla Participant amb la declaració:
struct Participant {
string nom;
double punts;
};
Fes una funció posicio_de_tall amb la següent
declaració:
/**
* @brief Retorna la primera posició `p` des del principi del vector,
* tal que el participant a `p` és el primer amb menys de la meitat
* de la puntuació del guanyador. Es pot suposar que aquesta cerca
* _sempre_ tindrà exit.
*
* @pre El vector `participants` està ordenat de més a menys punts.
*/
int posicio_de_tall(const vector<Participant>& participants);
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 Participant i c) la
definició de la funció posicio_de_tall. Si modifiqueu el
main.cc per poder provar en el vostre ordinador, podeu
esborrar (o comentar amb /* i */) tant la
funció main com llegeix_participants.
L’entrada són diversos cassos de llistes de participants. De la lectura ja se n’encarrega el programa principal. La funció rep un vector ordenat segons els punts de major a menor.
La sortida són els resultats per a cada llista. De l’escriptura també se n’encarrega el programa principal.
Input
4 bro 6 nigga 3 pal 2 buddy 1 3 jay 3 bob 3 gal 1 3 matt 5 pat 2 lex 1 7 a 9 b 9 c 9 d 9 e 9 f 9 g 4 5 top 3 z 0 zz 0 zzz 0 zzzz 0
Output
2 2 1 6 1